在mysql
控制台中我有这个
mysql> SELECT `name`, `lastname` FROM `tblStudents` WHERE `idStudent`='2';
+--------------+-----------------+
| name | lastname |
+--------------+-----------------+
| Lucio | Martínez |
+--------------+-----------------+
1 row in set (0.00 sec)
所以我希望在PHP中使用预处理语句获取该学生的姓名和姓氏。
这是代码:
$mysqli = $this->ConnectLowPrivileges();
echo 'Connected<br>';
$stmt = $mysqli->prepare("SELECT `name`, `lastname` FROM `tblStudents` WHERE `idStudent`=?");
if (false==$stmt){
die('prepare() failed: ' . htmlspecialchars($mysqli->error));
}
$id = 2;
if ($rc = $stmt->execute(array($id))){
if ($row = $stmt->fetch()){
echo "Name: {$row[0]}.<br>Last name: {$row[1]}.<br>";
echo 'Another way:'.print_r($row);
}
}
if (false==$rc){
die('execute() failed: ' . htmlspecialchars($stmt->error));
}
echo 'done';
mysqli_close($mysqli);
return true;
第二个条件给出错误,我得到的输出是:
Connected
execute() failed:
PHP可以毫无问题地与数据库建立连接。
我无法确切知道错误,因为$stmt->error
没有返回任何内容。
答案 0 :(得分:0)
为了避免进一步的评论,请阅读我在问题上发布的所有评论和链接以了解并更改代码:
$mysqli = $this->ConnectLowPrivileges();
echo 'Connected<br>';
$stmt = $mysqli->stmt_init();
$stmt->prepare("SELECT `name`, `lastname` FROM `tblStudents` WHERE `idStudent`=?");
$id = 2;
$stmt->bind_param('i', $id);
if ($stmt->execute()){
$stmt->bind_result($name, $lastname);
if ($stmt->fetch()){
echo "Name: {$name}<br>Last name: {$lastname}<br>";
//echo 'Another way:'.print_r($row, true); //won't work with bind_result
} else {
echo "No results";
}
} else {
die('execute() failed: ' . htmlspecialchars($stmt->error));
}
echo 'done';
stmt->close();
$mysqli->close();