PHP 准备好的陈述我很想知道为什么这不起作用
PHP Prepared Statement I Am Curious To Know Why This Doesnt Work
首先我必须说我爱 PHP。这太好玩了。所以这是我的问题,我正在使用准备好的语句和以下作品
<?php
$qm = $con->prepare("SELECT id, receiving_user_id, send_date, message_title, message_body, senders_name FROM Messages WHERE receiving_user_id=? ORDER by id");
/* execute statement */
$qm ->bind_param('i',$userid);
$qm->execute();
/* bind result variables */
$qm->bind_result($messid, $uid, $sent, $title, $body, $dudesname);
/* fetch values */
while ($qm->fetch()) {
echo ($dudesname. $title." ");
}
/* close statement */
$qm->close();
/* close connection */
$sql_e = $con-> prepare("SELECT id FROM Messages WHERE receiving_user_id=?");
$sql_e -> bind_param('i', $userid);
$sql_e -> execute();
$userCheck = $sql_e -> get_result();
$sql_e -> close();
if ($userCheck -> num_rows == 0) {
echo "No Messages... :(";
}
?>
但是,由于 $sql_e 语句和 $qm 语句做完全相同的事情,我想我可以输入以下内容并且它会起作用。但事实并非如此。
$qm = $con->prepare("SELECT id, receiving_user_id, send_date, message_title, message_body, senders_name FROM Messages WHERE receiving_user_id=? ORDER by id");
/* execute statement */
$qm ->bind_param('i',$userid);
$qm->execute();
/* bind result variables */
$qm->bind_result($messid, $uid, $sent, $title, $body, $dudesname);
/* fetch values */
while ($qm->fetch()) {
echo ($dudesname. $title." ");
}
/* close statement */
$qm->close();
/* close connection */
$qm -> execute();
$userCheck = $qm-> get_result();
$qm -> close();
if ($userCheck -> num_rows == 0) {
echo "No Messages... :(";
}
没有准备好的语句输入相同的内容,例如
$qm -> execute();
// Different Variables Here
$qm -> close();
$qm -> execute();
// Yet Another Set of Variables Here
$qm -> close();
很奇怪。对此的任何输入将不胜感激。我是 PHP 开发的新手,正在努力学习我能学到的一切。
编辑代码以使其与 $stmt reset() 一起工作;
$qm = $con->prepare("SELECT id, receiving_user_id, send_date, message_title, message_body, senders_name FROM Messages WHERE receiving_user_id=? ORDER by id");
/* execute statement */
$qm ->bind_param('i',$userid);
$qm->execute();
/* bind result variables */
$qm->bind_result($messid, $uid, $sent, $title, $body, $dudesname);
/* fetch values */
while ($qm->fetch()) {
echo ($dudesname. $title." ");
}
/* reset statement */
$qm->reset();
$qm -> execute();
$userCheck = $qm -> get_result();
if ($userCheck -> num_rows == 0) {
echo "No Messages... :(";
}
/* close statement */
$qm -> close();
您不需要执行两次查询。我想这就是你想要的:
$qm = $con->prepare("SELECT id, receiving_user_id, send_date, message_title, message_body, senders_name FROM Messages WHERE receiving_user_id=? ORDER by id");
/* execute statement */
$qm ->bind_param('i',$userid);
$qm->execute();
/* bind result variables */
$qm->bind_result($messid, $uid, $sent, $title, $body, $dudesname);
/* fetch values */
$userCheck = $qm->get_result();
if ($userCheck->num_rows > 0) {
while ($userCheck->fetch()) {
echo $dudesname. $title . " ";
}
} else {
echo "No Messages... :(";
}
/* close statement */
$qm -> close();
您当前的代码正在提前关闭连接。
首先我必须说我爱 PHP。这太好玩了。所以这是我的问题,我正在使用准备好的语句和以下作品
<?php
$qm = $con->prepare("SELECT id, receiving_user_id, send_date, message_title, message_body, senders_name FROM Messages WHERE receiving_user_id=? ORDER by id");
/* execute statement */
$qm ->bind_param('i',$userid);
$qm->execute();
/* bind result variables */
$qm->bind_result($messid, $uid, $sent, $title, $body, $dudesname);
/* fetch values */
while ($qm->fetch()) {
echo ($dudesname. $title." ");
}
/* close statement */
$qm->close();
/* close connection */
$sql_e = $con-> prepare("SELECT id FROM Messages WHERE receiving_user_id=?");
$sql_e -> bind_param('i', $userid);
$sql_e -> execute();
$userCheck = $sql_e -> get_result();
$sql_e -> close();
if ($userCheck -> num_rows == 0) {
echo "No Messages... :(";
}
?>
但是,由于 $sql_e 语句和 $qm 语句做完全相同的事情,我想我可以输入以下内容并且它会起作用。但事实并非如此。
$qm = $con->prepare("SELECT id, receiving_user_id, send_date, message_title, message_body, senders_name FROM Messages WHERE receiving_user_id=? ORDER by id");
/* execute statement */
$qm ->bind_param('i',$userid);
$qm->execute();
/* bind result variables */
$qm->bind_result($messid, $uid, $sent, $title, $body, $dudesname);
/* fetch values */
while ($qm->fetch()) {
echo ($dudesname. $title." ");
}
/* close statement */
$qm->close();
/* close connection */
$qm -> execute();
$userCheck = $qm-> get_result();
$qm -> close();
if ($userCheck -> num_rows == 0) {
echo "No Messages... :(";
}
没有准备好的语句输入相同的内容,例如
$qm -> execute();
// Different Variables Here
$qm -> close();
$qm -> execute();
// Yet Another Set of Variables Here
$qm -> close();
很奇怪。对此的任何输入将不胜感激。我是 PHP 开发的新手,正在努力学习我能学到的一切。
编辑代码以使其与 $stmt reset() 一起工作;
$qm = $con->prepare("SELECT id, receiving_user_id, send_date, message_title, message_body, senders_name FROM Messages WHERE receiving_user_id=? ORDER by id");
/* execute statement */
$qm ->bind_param('i',$userid);
$qm->execute();
/* bind result variables */
$qm->bind_result($messid, $uid, $sent, $title, $body, $dudesname);
/* fetch values */
while ($qm->fetch()) {
echo ($dudesname. $title." ");
}
/* reset statement */
$qm->reset();
$qm -> execute();
$userCheck = $qm -> get_result();
if ($userCheck -> num_rows == 0) {
echo "No Messages... :(";
}
/* close statement */
$qm -> close();
您不需要执行两次查询。我想这就是你想要的:
$qm = $con->prepare("SELECT id, receiving_user_id, send_date, message_title, message_body, senders_name FROM Messages WHERE receiving_user_id=? ORDER by id");
/* execute statement */
$qm ->bind_param('i',$userid);
$qm->execute();
/* bind result variables */
$qm->bind_result($messid, $uid, $sent, $title, $body, $dudesname);
/* fetch values */
$userCheck = $qm->get_result();
if ($userCheck->num_rows > 0) {
while ($userCheck->fetch()) {
echo $dudesname. $title . " ";
}
} else {
echo "No Messages... :(";
}
/* close statement */
$qm -> close();
您当前的代码正在提前关闭连接。