从准备好的语句创建多维数组

时间:2014-08-12 11:11:05

标签: php

我有使用常规查询的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;
 }

是否有必要使用带有此类查询的预准备语句,因为查询不涉及任何用户输入?

1 个答案:

答案 0 :(得分:1)

回答你的上一个问题

  

是否有必要将预处理语句与此类查询一起使用,因为查询不涉及任何用户输入?

不是真的。准备好的语句旨在对抗SQL注入攻击,这种攻击只能在严重消毒的用户输入中发生。如果您在没有用户输入的情况下创建查询,则只需使用原始实现就可以了。

关于循环中的NULL值,这表明您的查询失败。

$stmt->bind_param('i', $id);

上述功能不正确,最像是为什么查询不起作用。 “1”不是整数,i建议来自PHP Manual。请改用$i = 1(注意没有围绕值的引号)