SQLSTATE [HY093]:没有定义的参数
问题描述:
下面的脚本抛出我这个错误:无效的参数号SQLSTATE [HY093]:没有定义的参数
SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
错误来自这些行:
$query .= "WHERE username1=:un1";
$binValues["un1"] = $_POST['username1'];
是否有与PHP的任何问题句法?
我完整的脚本:
<?php
require_once "config.inc.php";
$query = "UPDATE customer SET ";
$binValues = [];
if(!empty($_POST['eidosmetaf1'])) {
$query .= "eidosmetaf1 = :e1";
$binValues["e1"] = $_POST['eidosmetaf1'];
}
if(!empty($_POST['weight1'])) {
$query .= ",weight1 = :w1";
$binValues["w1"] = $_POST['weight1'];
}
if(!empty($_POST['startNomos1'])){
$query .= ",startNomos1 = :sn1";
$binValues["sn1"] = $_POST['startNomos1'];
}
if(!empty($_POST['startPoli1'])) {
$query .= ",startPoli1 = :sc1";
$binValues["sc1"] = $_POST['startPoli1'];
}
if(!empty($_POST['start_lat'])) {
$query .= ",start_lat = :slat1";
$binValues["slat1"] = $_POST['start_lat'];
}
if(!empty($_POST['start_lng'])) {
$query .= ",start_lng = :slng1";
$binValues["slng1"] = $_POST['start_lng'];
}
if(!empty($_POST['finalNomos1'])) {
$query .= ",finalNomos1 = :fn1";
$binValues["fn1"] = $_POST['finalNomos1'];
}
if(!empty($_POST['finalPoli1'])) {
$query .= ",finalPoli1 = :fc1";
$binValues["fc1"] = $_POST['finalPoli1'];
}
if(!empty($_POST['final_lat'])) {
$query .= ",final_lat = :flat1";
$binValues["flat1"] = $_POST['final_lat'];
}
if(!empty($_POST['final_lng'])) {
$query .= ",final_lng = :flng1";
$binValues["flng1"] = $_POST['final_lng'];
}
if(!empty($_POST['depDate1'])) {
$query .= ",depDate1 = :dD1";
$binValues["dD1"] = $_POST['depDate1'];
}
if(!empty($_POST['depTime1'])) {
$query .= ",depTime1 = :dT1";
$binValues["dT1"] = $_POST['depTime1'];
}
if(!empty($_POST['specialservices1'])) {
$query .= ",specialservices1 = :ex1";
$binValues["ex1"] = $_POST['specialservices1'];
}
if(!empty($_POST['comments1'])) {
$query .= ",comments1 = :c1";
$binValues["c1"] = $_POST['comments1'];
}
//error here
$query .= "WHERE username1=:un1";
$binValues["un1"] = $_POST['username1'];
$query .= "and comments1=:c1_old";
$binValues["c1_old"] = $_POST['comments2_old'];
try {
$stmt = $db->prepare($query);
$stmt->execute($binValues);
} catch (PDOException $ex) {
$response["success"] = 0;
$response["message"] = "Database Error2. Please Try Again!";
echo $ex->getMessage();
die(json_encode($response));
}
$response["success"] = 1;
$response["message"] = "..............!";
echo json_encode($response);
?>
答
正如我已经解决了以前的代码,我会建议你从我的答案使用代码:https://*.com/a/29354781/3933332因为它是一个简单得多阅读和理解。
而且如果你用我的代码,你可以添加你WHERE
条款是这样的:
<?php
//...
foreach($checkedValues as $k => $v) {
$query .= "$v = :$k,";
$bindValues[$k] = $_POST[$v];
}
$query = rtrim($query, ",");
//fixed code here
if(isset($_POST['username1'])) {
$query .= " WHERE username1=:un1";
$bindValues["un1"] = $_POST["username1"];
}
if(isset($_POST['comments1'])) {
$query .= " AND comments1=:c1_old";
$bindValues["c1_old"] = $_POST["comments1"];
}
try {
$stmt = $db->prepare($query);
$stmt->execute($binValues);
} catch (PDOException $ex) {
$response["success"] = 0;
$response["message"] = "Database Error2. Please Try Again!";
echo $ex->getMessage();
die(json_encode($response));
}
//...
?>
答
$binValues[":un1"] = $_POST['username1']
+0
添加:不起作用。请注意,例如“$ binValues [”dD1“] = $ _POST ['depDate1'];”正在工作完美 – johnnal 2015-03-31 12:39:10
类似的问题:http://*.com/q/29354264/3933332你不觉得? – Rizier123 2015-03-31 12:24:18
* Hm ... *您可能需要在'where' ---'$ query。=“WHERE username1 =:un1”之前留出空格;' – 2015-03-31 12:26:37
您好,Rizier,您是否永远在线;哈哈哈。但我坚持:现在在特定的路线上是什么问题; – johnnal 2015-03-31 12:27:16