2016-08-05 52 views
1

我已经阅读了一些相关的问题,但在每种情况下,我都无法让他们的代码在我的上下文中工作。使用准备好的MySQLi语句生成关联数组

在进行了一些注入尝试之后,我试图在我的站点中实现准备好的语句,同时尽可能少地更改代码。重要的是,我希望通过输出为关联数组来响应我的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 ; 
} 
+0

'echo $ data;'没有数组。请参阅'fetch()'http://php.net/manual/en/mysqli-stmt.fetch.php手册,并没有选择想要回显的行。您还需要绑定结果。 'bind_result()'。 –

回答

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; 
+0

谢谢你,但是使用我得到的代码:'致命的错误:调用未定义的方法mysqli_stmt :: get_result()' – Rob