转换为准备语句 - 如何回显查询结果

时间:2013-05-23 19:10:09

标签: php mysql prepared-statement

我是第一次将查询转换为预处理语句,而我无法弄清楚如何提取数据......

这是我的代码:

/* Create a new mysqli object with database connection parameters */
$mysqli = new mysqli($hostname_db, $username_db, $password_db, $database_db);
if(mysqli_connect_errno()) {
  echo "Connection Failed: " . mysqli_connect_errno();
  exit();
}

   if($stmt = $mysqli -> prepare("SELECT name FROM table WHERE id=?")) {
      /* Bind parameters, s - string, b - blob, i - int, etc */
      $stmt -> bind_param("i", $rid);
      $stmt -> execute();
      $stmt -> bind_result($result);
      $stmt -> fetch();
      $stmt -> close();
   }    
   $mysqli -> close();

在这个例子中,我能够在页面正文中显示结果,如下所示:

<?php echo $results; ?>

但是,当我在上面的示例中更改查询以获取所有字段时,我无法弄清楚如何显示它:

SELECT * FROM table WHERE id = ? 

这不起作用:

<?php echo $results['id'] ?>

我在这里缺少什么?如何从该查询中显示随机字段名称?

谢谢!

3 个答案:

答案 0 :(得分:0)

在查询中绑定每列的变量:

$stmt = $mysqli->prepare("SELECT foo, bar, baz ...");
$stmt->bind_result($foo, $bar, $baz);

答案 1 :(得分:0)

是的,它会以这种方式工作,因为您选择了错误的驱动程序,这使得准备好的语句无法使用。

以下是使用the right driver的正确代码:

/* Create a new PDO object with database connection parameters */
$dsn = "mysql:host=localhost;dbname=test;charset=utf8";
$opt = array(
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$pdo = new PDO($dsn,'root','', $opt);    

/* Prepare a query, bind parameters and execute them */
$stmt = $pdo->prepare("SELECT name FROM table WHERE id=?");
$stmt -> execute(array($rid));
$row = $stmt -> fetch();

现在你可以按照你喜欢的方式回应结果,这比mysqli提供的方式更有用

<?=$row['id'] ?>

请注意显着缩短的代码。

答案 2 :(得分:0)

你必须考虑像这样一个一个地存储列:

$stmt->execute();

$stmt->bind_result($col1, $col2);

或使用this answer中的代码,它会为您提供所有列的数组,而不会相互指定。

相关问题