【问题标题】:prepared statement not executing but msqli_stmt_execute returning true准备好的语句未执行但 msqli_stmt_execute 返回 true
【发布时间】:2015-06-10 15:51:59
【问题描述】:

我在下面有一个插入查询,正在检查插入是否成功,使用:mysqli_stmt_execute。由于未将值输入到我的数据库中,因此查询未执行。但是,我正在进入if 条件。我无法理解这。我之前已经将stmt_prepare 包装在if 条件中,并且它也正在返回true,它正在成功准备。我对绑定语句做了同样的事情,现在我在最后的执行语句中有了它。全部返回 true,但查询未执行。表的结构是正确的。我什至在 phpmyadmin 中进行了插入,并将生成的查询粘贴到我的 AddToken 变量中。

    $con = 'my login credentials'
    $stmt = mysqli_stmt_init($con);
    $AddToken = "INSERT INTO `auth`  VALUES ('',?, ?)";

    mysqli_stmt_prepare($stmt, $AddToken);

    mysqli_stmt_bind_param($stmt, "si", $Token, $ID);

    if (mysqli_stmt_execute($stmt)){
        $message2 = "here";
        // worked
    }
    else{
        //didn't work
        $message2 = "here 2";
    }
    echo $message2;

编辑我不知道问题出在哪里,但我删除了我的 auth 表并重新创建它并且它有效?

【问题讨论】:

  • 您的 '' 是否保留为主键?如果是,请改用 DEFAULT
  • @Mihai 尝试了带引号和不带引号的 DEFAULT,导致准备语句失败

标签: php mysqli prepared-statement procedural


【解决方案1】:

插入查询中的VALUES() 中不需要有empty 字符串,因为您只插入了两个值 如果您知道,最好指定列名

$AddToken = "INSERT INTO `auth` (column1, column2) VALUES (?, ?)";

【讨论】:

  • 只有当你正好有 2 列时才有效。如果您有 3 个或更多,此查询将失败,因为数据库不知道您要在哪里插入这 2 个值。
  • @Identity Unkn0wn 我也试过了。它也不起作用
  • atlease 提供列名应该可以工作..您收到什么错误?
  • @IdentityUnkn0wn 我删除了表并重新添加了它。我在phpmyadmin上使用了flush、check、analyze和optimize操作。现在即使使用 phpmyadmin 界面,当我为第 2 列使用一个特定值时,它表示该行已插入,甚至给出了插入的 id!当我回到桌子上时,它还没有被插入。 phpmyadmin 的错误?
  • 你能告诉你列的名称吗,因为如果你使用任何 mysql 保留关键字作为列名,你必须在列名中添加反引号,如 INSERT INTO TABLENAME (column1)跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
  • 2015-07-13
  • 2012-01-31
  • 2018-10-05
相关资源
最近更新 更多