[英]Error: mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables
[英]SQL error :mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables
我有以下代碼:
$conn = new mysqli($DB, $username, $password, $dbname);
if($condition == 'con1'){
$sql = "UPDATE users SET con1=? WHERE name=?";
}elseif($condition == 'con2'){
$sql = "UPDATE users SET con2=? WHERE name=?";
}elseif($condition == 'con3'){
$sql = "UPDATE users SET con3=? WHERE name=?";
}
if($query = $conn->prepare($sql)) {
$query->bind_param($value,$name);
$query->execute();
print_r($query);
} else {
$error = $conn->errno . ' ' . $conn->error;
echo $error;
}
然后我得到那個錯誤:
Warning: mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables on line 32
這就是從$query
打印出來的內容:
mysqli_stmt Object
(
[affected_rows] => -1
[insert_id] => 0
[num_rows] => 0
[param_count] => 2
[field_count] => 0
[errno] => 2031
[error] => No data supplied for parameters in prepared statement
[error_list] => Array
(
[0] => Array
(
[errno] => 2031
[sqlstate] => HY000
[error] => No data supplied for parameters in prepared statement
)
)
[sqlstate] => HY000
[id] => 1
)
有2個 ? ,以及2個變量,但我收到錯誤消息,指出參數數量不等於變量數量。
問題是什么?
就您的情況而言,是您不正確地使用-> bind_param函數。
// prepare and bind
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email); // sss means string string string
// set parameters and execute
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
該參數可能是以下四種類型之一:
我相信正確的代碼應如下所示:
$conn = new mysqli($DB, $username, $password, $dbname);
// You can avoid this structure, by doing concatenation!!!**
if($condition == 'con1'){
$sql = "UPDATE users SET con1=? WHERE name=?";
}elseif($condition == 'con2'){
$sql = "UPDATE users SET con2=? WHERE name=?";
}elseif($condition == 'con3'){
$sql = "UPDATE users SET con3=? WHERE name=?";
}
if($query = $conn->prepare($sql)) {
$query->bind_param("ss", $con, $name);
$con = 'yourNeededValue';
$name = 'someName?';
$query->execute();
} else {
$error = $conn->errno . ' ' . $conn->error;
echo $error;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.