[英]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.