如何准备绑定变量的数量以匹配准备语句中的字段数

How to prepare number of bind variables to match the number of fields in prepared statement

首先,我知道这是一个重复的问题,我也在问同样的问题。但是我已经阅读了所有与同一问题相关的解决方案,但是当我按照建议的解决方案进行操作时,它会触发更多警告出现。 这就是我的代码

if($stmt = $mysqli->prepare("SELECT * FROM emergency WHERE id=?"))
{
$stmt->bind_param("i", $id);
$stmt->execute();

$stmt->bind_result($id, $patient_seen_u, $patient_seen_a);
$stmt->fetch();

// show the form
renderForm($patient_seen_u, $patient_seen_a, NULL, $id);

$stmt->close();

获得

Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement in C:\xampp\htdocs\gsd\emergency\records.php on line 122

所以我将代码更改为

if($stmt = $mysqli->prepare("SELECT date, patient_seen_u, patient_seen_a FROM emergency WHERE id ='?'"))
{
$stmt->bind_param("i", $id);
$stmt->execute();

$stmt->bind_result($id, $date, $patient_seen_u, $patient_seen_a);
$stmt->fetch();

// show the form
renderForm($date, $patient_seen_u, $patient_seen_a ,NULL, $id);

$stmt->close();
}

才得到这些警告;

Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement in C:\xampp\htdocs\gsd\emergency\records.php on line 119

Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement in C:\xampp\htdocs\gsd\emergency\records.php on line 122

并尝试这样做;

if($stmt = $mysqli->prepare("SELECT `date`, `patient_seen_u`,`patient_seen_a`  FROM `emergency` WHERE `id` = '?'"))
{
$stmt->bind_param("iii", $id);
$stmt->execute();

$stmt->bind_result($id, $date, $patient_seen_u, $patient_seen_a);
$stmt->fetch();

// show the form
renderForm($date, $patient_seen_u, $patient_seen_a ,NULL, $id);

$stmt->close();
}

但代码也不起作用。我该如何解决这个问题?

删除占位符周围的引号并添加 id 列以匹配 bind_result

的排列顺序
if($stmt = $mysqli->prepare("SELECT id, date, patient_seen_u, patient_seen_a FROM emergency WHERE id =?")) {

$stmt->bind_param("i", $id);// bind as integer 


$stmt->bind_result($id, $date, $patient_seen_u, $patient_seen_a);
if($stmt = $mysqli->prepare("SELECT id, date, patient_seen_u, patient_seen_a FROM emergency WHERE id =?")) 
{
$stmt->bind_param("i", $id);
$stmt->execute();

$stmt->bind_result($id, $date, $patient_seen_u, $patient_seen_a);
$stmt->fetch();

// show the form
renderForm($date, $patient_seen_u, $patient_seen_a ,NULL, $id);

$stmt->close();
}

现在一切正常。谢谢你。