PHP准备的语句执行不正确

PHP准备的语句执行不正确,php,mysqli,Php,Mysqli,我已经盯着一个问题很久了 我有一个PHP文件,它正在准备插入查询、绑定参数并执行查询(简单) 查询 $stmt = $db->prepare("SELECT insert_user(?, ?, ?, ?, ?, ?)"); $db->query("SELECT insert_user('Test', 'Account', 'testAccount@testApp.io', 'testAccount9', '1980-01-01', 1)"); 出于某种原因,execute返回的$

我已经盯着一个问题很久了

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

查询

$stmt = $db->prepare("SELECT insert_user(?, ?, ?, ?, ?, ?)");
$db->query("SELECT insert_user('Test', 'Account', 'testAccount@testApp.io', 'testAccount9', '1980-01-01', 1)");
出于某种原因,execute返回的$stmt对象将为受影响的行返回-1。如果我将代码更改为仅使用我想要绑定的值执行插入查询,改为硬编码,则查询工作正常

硬编码查询

$stmt = $db->prepare("SELECT insert_user(?, ?, ?, ?, ?, ?)");
$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');
}
...

我觉得这一点上的错误一定很简单,但我至少尝试了23432种不同的方法,但都没有成功。

我猜问题出在这里“ssssis”。
第五个应该是字符串,最后一个整数。也许这应该行得通?

我猜问题出在这里“ssssis”。
第五个应该是字符串,最后一个整数。也许这应该行得通?

选择
!=<代码>插入
。请参阅检查插入查询的语法---
insert-INTO-table(column)VALUES(:column)
是否已启用mysqli错误报告@A您指的是选择插入用户()部分吗?
SELECT
!=<代码>插入
。请参阅检查插入查询的语法---
insert-INTO-table(column)VALUES(:column)
是否已启用mysqli错误报告@a您指的是选择插入用户()部分吗?如果您查看放入第5个绑定(性别)中的值,则使用
$gender=intval($request->gender)设置该值@Shir Gans我正在数据库中传递一个性别整数值。Date是一个由insert_用户函数转换为日期的字符串。对,但是OP的
硬编码查询
,它们使用性别
1
作为最终参数。OMG,就是这样!你们真是浪费时间对不起!my DB中的insert_函数将DOB作为第五个参数,性别作为最后一个参数。如果查看放入第五个绑定(性别)中的值,则使用
$gender=intval($request->gender)设置该值@Shir Gans我正在数据库中传递一个性别整数值。Date是一个由insert_用户函数转换为日期的字符串。对,但是OP的
硬编码查询
,它们使用性别
1
作为最终参数。OMG,就是这样!你们真是浪费时间对不起!my DB中的insert_函数将DOB作为第5个参数,性别作为最后一个参数。