[英]php mysql prepared statement bind param error
我一直被卡在这个错误上。 感谢对此的任何帮助:
此功能是使用ajax的较长代码的一部分。 Ajax可以毫无疑问地进入该功能,从而检索发布数据。 代码使用$ message返回结果,并返回到ajax,并将数据作为response.message检索。
错误在碰到bind_param时发生。
尝试注释掉bind_param中的代码,而ajax返回测试消息就好了。
当未注释的bind_param时,即使bind_param失败,也会发送消息“ fail”,否则发送消息“ pass”。 没有消息进入$消息中。
任何想法为什么会发生这种情况?
码:
function edit_Loc_Name($connection){//67
$new_loc_name = mysqli_real_escape_string($connection, $_POST['location_editloc_name']);
$projid = mysqli_real_escape_string($connection, $_POST['projid']);
$loc_id = mysqli_real_escape_string($connection, $_POST['edit_loc_id']);
$checklocname = checkLocationLoc($projid,$new_loc_name,$connection);
if ($checklocname === "Duplicate location."){
$message = "Duplicate location.";
}else if($checklocname === "Location okay"){
$stmt = $connection->prepare("UPDATE projectlocation SET locname = ? WHERE id = ?");
if($stmt === false){
$message = "Ajax err:67 1";$stmt->close();
}else{
$stmt->bind_param('si',$new_loc_name,$loc_id);
$rc = $stmt->execute();
if($rc === false){
$message = "Ajax err:67 3";$stmt->close();
}else{
$message = "Location updated.";$stmt->close();
}
}
}else{
$message = "Ajax err:67 5";
}
$connection->close();
return $message;
}
您正在将数据传递给real_escape_string (如上所述,如果以后绑定,则不需要它)。
该函数返回一个字符串,因此您的$ loc_id现在是一个字符串。
但是在绑定中:
$stmt->bind_param('si',$new_loc_name,$loc_id);
您将数据声明为si(字符串,整数)而不是ss。
尝试解决此问题。
更新:
例如,我在本地主机中运行了此脚本,并且该脚本正常运行:
$connection=mysqli_connect("localhost", "root", "", "my-db");
function edit_Loc_Name($connection){
$loc_id = 1;
$checklocname = "Location okay";
if ($checklocname === "Duplicate location."){
$message = "Duplicate location.";
}else if($checklocname === "Location okay"){
$stmt=$connection->prepare("select * from my-table where id=?");
if($stmt === false){
$message = "Ajax err:67 1";//$stmt->close();
}else{
$stmt->bind_param('i',$loc_id);
$rc = $stmt->execute();
if($rc === false){
$message = "Ajax err:67 3";//$stmt->close();
}else{
$message = "Location updated.";//$stmt->close();
}
}
}else{
$message = "Ajax err:67 5";
}
$connection->close();
return $message;
}
echo edit_Loc_Name($connection)
在多个函数调用期间,$ connection已关闭。
checkLocationLoc($ projid,$ new_loc_name,$ connection)已关闭$ connection。
因此,所有与$ connection相关的方法均未响应。
一旦$ connection-> close(); 被删除,一切正常。
对不起麻烦的家伙。 这对我来说是艰苦的一课。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.