我有使用常规查询的PHP代码,但我想将其转换为预处理语句。尝试使用准备好的查询创建数组时,我一直收到错误。
这是使用可以完美运行的常规查询创建的数组。
public function tickets () {
$this->db_connection = new mysqli('', '', '', '');
$sql = "SELECT * FROM tickets WHERE member_id = '1'";
$query = $this->db_connection->query($sql);
$me2 = array();
while ($row = $query->fetch_object()) {
$me2[$row->ticket_id]['ticket_result'] = $row->ticket_result;
$me2[$row->ticket_id]['member_id'] = $row->member_id;
}
return $me2;
}
这是我尝试更改为不起作用的预准备语句的新代码。当我尝试使用foreach循环进行回显时,var_dump返回“NULL”值。
public function tickets() {
$this->db_connection = new mysqli('', '', '', '');
$sql = "SELECT * FROM tickets
WHERE member_id = ? ";
$stmt = $this->db_connection->prepare($sql);
$id = "1";
$stmt->bind_param('i', $id);
$stmt->execute();
$stmt->store_result();
$me2 = array();
while ($row = $stmt->fetch()) {
$me2[$row->ticket_id]['ticket_result'] = $row->ticket_result;
$me2[$row->ticket_id]['member_id'] = $row->member_id;
}
return $me2;
}
是否有必要使用带有此类查询的预准备语句,因为查询不涉及任何用户输入?
答案 0 :(得分:1)
回答你的上一个问题
是否有必要将预处理语句与此类查询一起使用,因为查询不涉及任何用户输入?
不是真的。准备好的语句旨在对抗SQL注入攻击,这种攻击只能在严重消毒的用户输入中发生。如果您在没有用户输入的情况下创建查询,则只需使用原始实现就可以了。
关于循环中的NULL值,这表明您的查询失败。
$stmt->bind_param('i', $id);
上述功能不正确,最像是为什么查询不起作用。 “1”不是整数,i
建议来自PHP Manual。请改用$i = 1
(注意没有围绕值的引号)