Php 为什么会出现错误:绑定变量的数量与prepared语句中的字段数量不匹配
我得到一个错误,它说绑定变量的数量和这一行的prepared语句中的字段数量不匹配Php 为什么会出现错误:绑定变量的数量与prepared语句中的字段数量不匹配,php,stored-procedures,mysqli,prepared-statement,Php,Stored Procedures,Mysqli,Prepared Statement,我得到一个错误,它说绑定变量的数量和这一行的prepared语句中的字段数量不匹配 $query1->bind_result($book_id, $title, $isbn, $isbn13, $pubyear, $pubname); 除了我知道100%,因为这个过程按顺序返回字段:book_id,book_title,isbn,isbn13,pubyear,pubname 为什么我会出现这个错误? 这是我的全部代码 <?php declare(strict_types=1); i
$query1->bind_result($book_id, $title, $isbn, $isbn13, $pubyear, $pubname);
除了我知道100%,因为这个过程按顺序返回字段:book_id,book_title,isbn,isbn13,pubyear,pubname
为什么我会出现这个错误?
这是我的全部代码
<?php
declare(strict_types=1);
if(basename($_SERVER['SCRIPT_NAME']) == basename(__FILE__)) {
header('Location: /spabsa/phprouter');
}
function showBooksByTitle()
{
include_once '../../blurg.inc';
# VALIDATE THIS YOU MORON!!
$title = $_POST['title'];
$db1 = new mysqli('localhost', 'spabsa', $password, 'STUspabsa');
if($db1->connect_errno > 0)
{
die('Unable to connect to database [' . $db1->connect_error . ']');
}
$query1 = $db1->prepare("call getbooksbytitle(?)");
$query1->bind_param('s', $title);
$query1->execute();
$query1->bind_result($book_id, $title, $isbn, $isbn13, $pubyear, $pubname);
while($query1->fetch()) {
echo '<a href="searh/bookinfo/' . $book_id . '">' . $title . '</a><br />';
echo $pubyear . '<br />';
echo $pubname . '<br />';
echo $isbn . '<br />';
echo $isbn13 . '<br />';
}
$query1->free_result();
$db1->close();
}
showBooksByTitle();
?>
存储过程中存在逻辑缺陷。当booktitle为空时,其长度将为0,并且永远不会执行选择。即使未执行选择,存储过程也始终返回空结果。但是,空结果没有列,因此无法绑定到它 从PHP调用SP非常麻烦。你应该尽可能地避免它。在您的情况下,SP除了SELECT之外没有其他逻辑,这意味着您可以摆脱SP并使用普通的prepared语句调用SELECT。但是如果您想解决空结果集的问题,那么我可能建议您使用get_result而不是绑定
$stmt->execute();
if ($result = $stmt->get_result()) {
foreach ($result as $row) {
echo '<a href="searh/bookinfo/' . $row['book_id'] . '">' . $row['title'] . '</a><br />';
echo $row['pubyear'] . '<br />';
echo $row['pubname'] . '<br />';
echo $row['isbn'] . '<br />';
echo $row['isbn13'] . '<br />';
}
$stmt->next_result(); // To consume the empty result
}
但我强烈建议重新设计SP或完全摆脱它。您的存储过程中存在逻辑缺陷。当booktitle为空时,其长度将为0,并且永远不会执行选择。即使未执行选择,存储过程也始终返回空结果。但是,空结果没有列,因此无法绑定到它 从PHP调用SP非常麻烦。你应该尽可能地避免它。在您的情况下,SP除了SELECT之外没有其他逻辑,这意味着您可以摆脱SP并使用普通的prepared语句调用SELECT。但是如果您想解决空结果集的问题,那么我可能建议您使用get_result而不是绑定
$stmt->execute();
if ($result = $stmt->get_result()) {
foreach ($result as $row) {
echo '<a href="searh/bookinfo/' . $row['book_id'] . '">' . $row['title'] . '</a><br />';
echo $row['pubyear'] . '<br />';
echo $row['pubname'] . '<br />';
echo $row['isbn'] . '<br />';
echo $row['isbn13'] . '<br />';
}
$stmt->next_result(); // To consume the empty result
}
但是我强烈建议重新设计SP或完全删除它。您可以添加存储过程吗?是啊,抱歉,看起来您只绑定了一个$query1->bind_参数',$title您可以添加存储过程吗?是啊,抱歉,看起来您只绑定了一个$query1->bind_参数',$title