【问题标题】:php update SQL statement not workingphp更新SQL语句不起作用
【发布时间】:2014-09-29 20:15:39
【问题描述】:

我正在尝试制作一个有效的登录页面,并且我想跟踪用户的成功和不成功登录。

我正在尝试使用 php 中的更新语句来做到这一点:

     $updateSQL="UPDATE login SET successfulLogins = IFNULL(successfulLogins, 0) + 1 
     WHERE username ='". $user ."'";
     $updateStmnt=$dbcon->prepare($updateSQL);
     $updateStmnt->execute();

这给了我错误:致命错误:在非对象上调用成员函数 execute()

我尝试使用 SQL 在数据库中手动输入更新语句,它工作正常,所以问题与 php 有关。我认为

谢谢

编辑:我通过在代码前面关闭 dbcon 解决了这个问题,但现在我对这段代码有同样的问题:

    $isError=true;
    $errorMessage.="Username or password is incorrect<br />";

    $updateSQL="UPDATE login SET unsuccessfulLogins = IFNULL(unsuccessfulLogins, 0) + 1 
    WHERE username ='". $user ."'";
    $updateStmnt=$dbcon->prepare($updateSQL);
    $updateStmnt->execute();

我现在得到:

警告:mysqli::prepare(): 无法获取 mysqli 致命错误:在非对象上调用成员函数 execute()

【问题讨论】:

  • print $updateSQL 的输出是什么?
  • 你是如何实例化 $dbcon 的?你能补充更多信息吗?
  • 在创建连接时尝试传入PDO::ERRMODE_EXCEPTION作为选项,看看是否有任何异常被抛出以及它们在说什么。
  • 您是否启用了错误处理和显示?如果没有,你应该从那开始。
  • 如果您想使用准备好的语句,请使用占位符而不是直接在查询中插入(随机)文本。示例见PDO::preparemysqli::prepare

标签: php sql


【解决方案1】:
 $updateSQL = "UPDATE login SET successfulLogins = IFNULL(successfulLogins, 0) + 1 WHERE username ='". $user ."'";
 // check your function returns
 if( ! $updateStmnt = $dbcon->prepare($updateSQL) ) {
     // check for error information if an error occurred
     die(print_r($dbcon->errorInfo()));
 }
 // second verse, same as the first
 if( ! $updateStmnt->execute() ) {
     die(print_r($updateStmnt->errorInfo()));
 }

基本上,您的prepare() 因某种原因而失败,并且由于您既没有检查函数返回也没有向 PDO 提供PDO::ERRMODE_EXCEPTION 标志,所以您的脚本只会继续前进,直到遇到第二个错误并实际死亡。

【讨论】:

    【解决方案2】:

    问题已解决。这只是一个没有在正确的地方关闭 $dbcon 和 $stmnt 的问题......我敢肯定,如果我提供了更多代码,任何人都可以告诉我。

    下次我会发布更多我的代码。我是这个网站的新手!

    谢谢!

    【讨论】:

      猜你喜欢
      • 2015-07-16
      • 1970-01-01
      • 2017-09-27
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多