我是php的新手。我在第($stmt->bindParam(":e1",$_POST['eidosmetaf1'])行找到了它。)error"未定义的变量:stmt-in"。这似乎是一个基本错误,但我搞不清楚。非常感谢您的帮助
<?php
require("config.inc.php");
$query = "UPDATE customer SET ";
if(isset($_POST['eidosmetaf1'])){
$stmt->bindParam(":e1", $_POST['eidosmetaf1']);
$query .= "eidosmetaf1 = :e1";
}
$query = "UPDATE customer SET ";
if(isset($_POST['weight1'])){
$stmt->bindParam(":w1", $_POST['weight1']);
$query .= "weight1 = :w1";
}
$query = "UPDATE customer SET ";
if(isset($_POST['startNomos1'])){
$stmt->bindParam(":sn1", $_POST['startNomos1']);
$query .= "startNomos1 = :sn1";
}
$query = "UPDATE customer SET ";
if(isset($_POST['startPoli1'])){
$stmt->bindParam(":sc1", $_POST['startPoli1']);
$query .= "startPoli1 = :sc1";
}
$query = "UPDATE customer SET ";
if(isset($_POST['start_lat'])){
$stmt->bindParam(":slat1", $_POST['start_lat']);
$query .= "start_lat = :slat1";
}
$query = "UPDATE customer SET ";
if(isset($_POST['start_lng'])){
$stmt->bindParam(":slng1", $_POST['start_lng']);
$query .= "start_lng = :slng1";
}
$query = "UPDATE customer SET ";
if(isset($_POST['finalNomos1'])){
$stmt->bindParam(":fn1", $_POST['finalNomos1']);
$query .= "finalNomos1 = :fn1";
}
$query = "UPDATE customer SET ";
if(isset($_POST['finalPoli1'])){
$stmt->bindParam(":fc1", $_POST['finalPoli1']);
$query .= "finalPoli1 = :fc1";
}
$query = "UPDATE customer SET ";
if(isset($_POST['final_lat'])){
$stmt->bindParam(":flat1", $_POST['final_lat']);
$query .= "final_lat = :flat1";
}
$query = "UPDATE customer SET ";
if(isset($_POST['final_lng'])){
$stmt->bindParam(":flng1", $_POST['final_lng']);
$query .= "final_lng = :flng1";
}
$query = "UPDATE customer SET ";
if(isset($_POST['depDate1'])){
$stmt->bindParam(":dD1", $_POST['depDate1']);
$query .= "depDate1 = :dD1";
}
$query = "UPDATE customer SET ";
if(isset($_POST['depTime1'])){
$stmt->bindParam(":dT1", $_POST['depTime1']);
$query .= "depTime1 = :dT1";
}
$query = "UPDATE customer SET ";
if(isset($_POST['specialservices1'])){
$stmt->bindParam(":ex1", $_POST['specialservices1']);
$query .= "specialservices1 = :ex1";
}
$query = "UPDATE customer SET ";
if(isset($_POST['comments1'])){
$stmt->bindParam(":c1", $_POST['comments1']);
$query .= "comments1 = :c1";
}
try {
$stmt = $db->prepare($query);
$stmt->execute();
}
catch (PDOException $ex) {
$response["success"] = 0;
$response["message"] = "Database Error2. Please Try Again!";
die(json_encode($response));
}
$response["success"] = 1;
$response["message"] = "..............!";
echo json_encode($response);
?>
你在这里搞砸了一些事情!
您需要在绑定值之前准备好查询,否则php应该如何知道在当时不存在的查询中绑定值的位置和方式!此外,您还可以在每个if语句之前覆盖$query
变量。
所以你的代码应该是这样的:
这里,我首先遍历数组$checkPostIndex
,它将占位符作为索引,将POST变量索引作为值,在这里,我用array_filter()
检查哪些$_POST
变量被设置,哪些没有设置,这是我对isset()
所做的,并将它们过滤掉。
在此之后,我循环遍历$checkedValues
数组,该数组保存与$checkPostIndex
完全相同的数据,但仅使用已设置的POST变量。这样,我就创建了查询,并创建了占位符数组,其中占位符作为索引,POST变量值作为值。
然后,我只需要用rtrim()
从查询字符串中修剪最后一个逗号,就可以执行查询了。
<?php
require_once "config.inc.php";
$query = "UPDATE customer SET ";
$checkPostIndex = ["e1" => "eidosmetaf1", "w1" => "weight1", "sn1" => "startNomos1", "sc1" => "startPoli1", "slat1" => "start_lat", "slng1" => "start_lng", "fn1" => "finalNomos1",
"fc1" => "finalPoli1", "flat1" => "final_lat", "flng1" => "final_lng", "dD1" => "depDate1", "dT1" => "depTime1", "ex1" => "specialservices1", "c1" => "comments1"];
$bindValues = [];
$checkedValues = array_filter($checkPostIndex, function($v){
return isset($_POST[$v]);
});
foreach($checkedValues as $k => $v) {
$query .= "$v = :$k,";
$bindValues[$k] = $_POST[$v];
}
$query = rtrim($query, ",");
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);
?>
旁注:
我建议您在文件的顶部添加错误报告,这可以帮助您查找错误。仅在暂存时(不在生产中!):
<?php
ini_set("display_errors", 1);
error_reporting(E_ALL);
?>
在连接后立即为PDO连接启用错误模式:
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
require("config.inc.php");
$query=array();
foreach(array('eidosmetaf1','...') as $k){
if(isset($_POST[$k])){
$query[]= "$k = :$k";
}
}
$query = "UPDATE customer SET ".imolde(',',$query);
$query .= "";#where clause is missing
try {
$stmt = $db->prepare($query);
foreach(array('eidosmetaf1','...') as $k){
if(isset($_POST[$k])){
$stmt->bindParam(":$k", $_POST[$k]);
}
}
$stmt->execute();
} catch (PDOException $ex) {
$response["success"] = 0;
$response["message"] = "Database Error2. Please Try Again!";
die(json_encode($response));
}
$response["success"] = 1;
$response["message"] = "..............!";
echo json_encode($response);
试着这样做:PREPARE语句字符串、CREATE PDO、PREPARE QUERY、BIND PARMS、EXECUTE