【问题标题】:PHP MYSQLI prepared update statement not working? [duplicate]PHP MYSQLI 准备的更新语句不起作用? [复制]
【发布时间】:2015-01-05 08:52:03
【问题描述】:

不知道为什么这不起作用。我按照完全相同的过程(即准备、绑定、执行)在同一个数据库上执行 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';");

【问题讨论】:

    标签: php mysqli prepared-statement


    【解决方案1】:

    在我看来,根据变量名称,如果它们实际上是 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;
    }
    

    【讨论】:

    • 非常好的建议,我什至没有想到。所以这确实让我更好地了解现在可能导致它的原因,因为 $key_text_id 是一个 int 所以我做了那个改变,但奇怪的是 $contact_id 被存储为一个 varchar?我在想它现在可能与given_date = CURRENT_DATE() 函数有关。因为我的测试页面甚至没有吐出我最初放在脚本顶部的 html。非常感谢您的建议
    • given_date 列类型是DATEDATETIME 还是TIMESTAMP
    • given_date 是数据库中的date 类型
    • 好的,你很好。你试过WHERE key_text_id = ?";吗?
    • 是的,我尝试过,但没有成功。问题,在$stmtUpdate->bind_param("ssisi","11-8-14",$recipient_email,1,$contact_id,$key_text_id); 的这一行上,那个 1 需要用引号引起来吗?我试过了,但没有什么不同,我只是想知道这是否是一些标准?
    猜你喜欢
    • 2013-03-24
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多