php,使用准备好的语句更新 mysqli 不工作
php, mysqli update with prepared statement not working
function update_review($link, $user_id, $game_id, $rating, $title, $review) {
$sql = "UPDATE reviews SET rating = ?, title = ?, review = ? WHERE user_id = ? AND game_id = ?";
$stmt = $link->prepare($sql);
if ( !$stmt ) {
die("could not prepare statement: " . $link->errno . ", error: " . $link->error);
}
$stmt->bind_param("sssii", $rating, $title, $review, $user_id, $game_id);
if ( !$stmt ) {
die("could not bind params: " . $stmt->error);
}
if ( !$stmt->execute() ) {
die("couldn't execute statement");
}
}
function update_review2($link) {
$sql = "update reviews set rating = \"43\", title = \"test\", review = \"blah\" where user_id = \"5\" and game_id = \"1\"";
$stmt = $link->prepare($sql);
if ( !$stmt ) {
die("could not prepare statement: " . $link->errno . ", error: " . $link->error);
}
if ( !$stmt->execute() ) {
die("couldn't execute statement");
}
}
var_dump($review_data);
// output = array(5) { ["user_id"]=> int(5) ["game_id"]=> int(1) ["rating"]=> string(2) "43" ["title"]=> string(4) "test" ["review"]=> string(4) "blah" }
update_review($link, $review_data['rating'], $review_data['title'], $review_data['review'], $review_data['user_id'], $review_data['game_id']);
老实说,做了大学学生通常做的事,把作业留到最后一分钟,又后悔了……
无论如何,现在已经尝试解决这个问题几个小时了,我已经不知所措了,我通过不使用准备好的语句使其工作,正如您在上面的 update_review2 函数中看到的那样,但是当使用准备好的语句版本时update_review 它不影响数据库中的任何行。如果有人能提供一点帮助,我们将不胜感激,尤其是因为截止日期是 6 小时!
根据您上面的代码,对 update_review() 的函数调用有一个顺序的变量,而函数本身是用另一个顺序声明的变量。
因此,当语句需要一个 int 时,您可能会传递一个字符串。
function update_review($link, $user_id, $game_id, $rating, $title, $review) {
$sql = "UPDATE reviews SET rating = ?, title = ?, review = ? WHERE user_id = ? AND game_id = ?";
$stmt = $link->prepare($sql);
if ( !$stmt ) {
die("could not prepare statement: " . $link->errno . ", error: " . $link->error);
}
$stmt->bind_param("sssii", $rating, $title, $review, $user_id, $game_id);
if ( !$stmt ) {
die("could not bind params: " . $stmt->error);
}
if ( !$stmt->execute() ) {
die("couldn't execute statement");
}
}
function update_review2($link) {
$sql = "update reviews set rating = \"43\", title = \"test\", review = \"blah\" where user_id = \"5\" and game_id = \"1\"";
$stmt = $link->prepare($sql);
if ( !$stmt ) {
die("could not prepare statement: " . $link->errno . ", error: " . $link->error);
}
if ( !$stmt->execute() ) {
die("couldn't execute statement");
}
}
var_dump($review_data);
// output = array(5) { ["user_id"]=> int(5) ["game_id"]=> int(1) ["rating"]=> string(2) "43" ["title"]=> string(4) "test" ["review"]=> string(4) "blah" }
update_review($link, $review_data['rating'], $review_data['title'], $review_data['review'], $review_data['user_id'], $review_data['game_id']);
老实说,做了大学学生通常做的事,把作业留到最后一分钟,又后悔了…… 无论如何,现在已经尝试解决这个问题几个小时了,我已经不知所措了,我通过不使用准备好的语句使其工作,正如您在上面的 update_review2 函数中看到的那样,但是当使用准备好的语句版本时update_review 它不影响数据库中的任何行。如果有人能提供一点帮助,我们将不胜感激,尤其是因为截止日期是 6 小时!
根据您上面的代码,对 update_review() 的函数调用有一个顺序的变量,而函数本身是用另一个顺序声明的变量。
因此,当语句需要一个 int 时,您可能会传递一个字符串。