php - 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 种不同的方法都没有成功。
解决方案
我猜问题出在 "ssssis" 。第五个应该是字符串,最后一个整数。也许这应该工作?
推荐阅读
- java - Unicode - 提取字符串中的字符包含 Java 中的泰米尔语字母
- arrays - Python:没有分配值
- firebase - Gitlab CI 管道部署到 Firebase
- scala - ShapefileReader.readToGeometryRDD 导致试图访问方法 com.google.common.base.Stopwatch
- javascript - 尝试使用 Javascrpit 更改 Input 的值得到安全错误
- java - 找不到源 Eclipse IDE
- python - 优化散点图
- android - Android 上的 IMA SDK 问题
- rxjs - 从 'rxjs' 导入并带有 'rxjs-compat' 作为附加依赖项不会使兼容的 Observables
- jwt - 我们需要对内部微服务进行身份验证吗?