使用准备好的MySQLi语句来生成关联数组

时间:2016-08-05 12:17:19

标签: php mysql mysqli prepared-statement

我已经阅读了一些与此相关的问题,但在每种情况下,我都无法让他们的代码在我的环境中工作。

在尝试了一些注入之后,我尝试在我的网站中实现准备好的语句,同时尽可能少地修改代码。重要的是,我希望通过输出关联数组来响应我的SELECT查询:例如$row['name']

以下是我现在拥有的代码示例(没有预先准备好的语句):

// Create connection
$db = new mysqli('localhost', 'username', 'password', 'seatingplan');

if($db->connect_errno > 0){
    die('Unable to connect to database [' . $db->connect_error . ']');
}

// Get class name

$sql = <<<SQL
    SELECT *
    FROM `class` 
    WHERE `userid` = '$userid'
    AND `classid` = '$classid'  
SQL;

if(!$result = $db->query($sql)){
    die('There was an error running the query [' . $db->error . ']');
}

while($row = $result->fetch_assoc()){
    $classname =  $row['classname'] ;
}

是否有一种直接的方法可以将其用于准备好的陈述?基于其他问题,这是我所拥有的(但它不起作用 - 每行只返回1,而不是实际变量):

$stmt = $db->prepare("SELECT *
    FROM `class` 
    WHERE `userid` = ?
    AND `classid` = ?");

$stmt->bind_param("ss", $userid, $classid);

$result = $stmt->execute(); 

$stmt->store_result(); 

while($data = $stmt->fetch()){ 

        echo $data ;
}

1 个答案:

答案 0 :(得分:0)

只需定义数组并在代码中使用它:

 $stmt = $db->prepare("SELECT *
    FROM `class` 
    WHERE `userid` = ?
    AND `classid` = ?");

$stmt->bind_param("ss", $userid, $classid);

$stmt->execute(); 

$result=$stmt->get_result(); 
$row= array();
$i=0;
         while ($data = $result->fetch_assoc())
        {
                $row[$i]['name']=$data['name'];
                $i++;
        }
echo $row;