首页 > 解决方案 > PHP Prepared Statement 未正确执行

问题描述

我一直盯着一个问题很久了。

我有一个 PHP 文件,它正在准备插入查询、绑定参数并执行查询(简单)。

询问

$stmt = $db->prepare("SELECT insert_user(?, ?, ?, ?, ?, ?)");

由于某种原因,execute 返回的 $stmt 对象为受影响的行返回 -1。如果我更改代码以仅使用我想要绑定的值进行插入查询,而不是硬编码,那么查询就可以正常工作。

硬编码查询

$db->query("SELECT insert_user('Test', 'Account', 'testAccount@testApp.io', 'testAccount9', '1980-01-01', 1)");

bind_param 部分出了点问题。我打开了错误,并且也在检查 mysqli 错误,但两者都没有返回错误。

PHP文件

...

$postdata = file_get_contents("php://input");

if (isset($postdata) && !empty($postdata)) {
  $request = json_decode($postdata);
}

if (
  validate_string($request->fname) 
  && validate_string($request->lname) 
  && validate_integer(intval($request->gender))) {
      $stmt = $db->prepare("SELECT insert_user(?, ?, ?, ?, ?, ?)");
      if ($stmt) {
        $stmt->bind_param("ssssis", $first_name, $last_name, $email, $password, $gender, $dob);
        $first_name = $request->fname;
        $last_name = request->lname;
        $email = $request->email;
        $password = password_hash($request->password, PASSWORD_BCRYPT);
        $gender = intval($request->gender);
        $dob = $request->dob;

        $stmt->execute();
        if ($stmt->affected_rows > 0) {
          echo toJson('success');
        } else {
          echo toJson('fail');
        }
     } else {
         echo toJson("Prepare failed: (" . $db->errno . ") " . $db->error);
     }
} else { 
   echo toJson('fail - passed data not valid');
}
...

我觉得此时的错误一定很简单,但我至少尝试了 23,432 种不同的方法都没有成功。

标签: phpmysqli

解决方案


我猜问题出在 "ssssis" 。第五个应该是字符串,最后一个整数。也许这应该工作?


推荐阅读