PHP MYSQLI准备的更新语句不起作用


PHP MYSQLI prepared update statement not working?

不知道为什么这不起作用。我在同一个数据库上执行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';");

根据变量名,我认为如果这些占位符实际上是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;
}