PHP MYSQLI编写的更新语句不起作用?

时间:2014-11-08 18:01:43

标签: php mysqli prepared-statement

不知道为什么这不起作用。我按照完全相同的程序(即准备,绑定,执行)在同一个数据库上执行SELECT。但由于某种原因,更新不会在数据库中更新。

以下是代码:

$stmtUpdate = $mysqli->prepare("UPDATE license_keys.$injection_key_text_type 
SET given_date = CURRENT_DATE(), contact_email = ?, given_bool = ?, contact_id = ?    
WHERE key_text_id = ?;";
$stmtUpdate->bind_param("siss",$recipient_email,1,$contact_id,$key_text_id);
$stmtUpdate->execute();
$stmtUpdate->close();

我尝试过的事情

  • 在if语句中包装第一行
  • given_date = CURRENT_DATE切换为given_date = ?,然后在我的绑定参数中添加了一个任意字符串,即($stmtUpdate->bind_param("ssiss","11-8-2014",$recipient_email,1,$contact_id,$key_text_id);
  • 尝试使用和不使用“;”在声明的最后,因为它适用于程序版本而不是OO方式。

另请注意,如果我将其作为程序运行它可以正常工作,但我需要它使用预处理语句。 这是程序代码:

$mysqli->query("UPDATE license_keys.$injection_key_text_type 
SET given_date = CURRENT_DATE(), contact_email = '$recipient_email', given_bool = 1, contact_id = '$contact_id' 
WHERE key_text_id = '$key_text_id';");

1 个答案:

答案 0 :(得分:2)

根据变量名称向我看,如果它们实际上是INT,那么您需要将其中几个占位符作为整数而不是字符串。

$stmtUpdate->bind_param("siii",$recipient_email,1,$contact_id,$key_text_id);

出于调试目的,我建议你这样做。 $mysqli将是您的数据库连接。希望它能让你知道出了什么问题。

if (!($stmtUpdate = $mysqli->prepare("UPDATE license_keys.$injection_key_text_type 
SET given_date = CURRENT_DATE(), contact_email = ?, given_bool = ?, contact_id = ?    
WHERE key_text_id = ?")) {
    echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
    exit;
}

if (!$stmtUpdate->bind_param("sisi",$recipient_email,1,$contact_id,$key_text_id)) {
    echo "Binding parameters failed: (" . $stmtUpdate->errno . ") " . $stmtUpdate->error;
    exit;
}

if (!$stmtUpdate->execute();) {
    echo "Execute failed: (" . $stmtUpdate->errno . ") " . $stmtUpdate->error;
    exit;
}