0

我第一次将查询转换为准备好的语句,但我无法弄清楚如何提取数据......

这是我的代码:

/* 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'] ?>

我在这里想念什么?我将如何显示该查询中的随机字段名称?

谢谢!!

4

3 回答 3

0

是的,当您选择错误的驱动程序时,它不会以这种方式工作,这会使准备好的语句变得非常不可用。

这是使用正确驱动程序的正确代码:

/* 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'] ?>

请注意大大缩短的代码。

于 2013-05-23T19:15:44.773 回答
0

在查询中为每列绑定一个变量:

$stmt = $mysqli->prepare("SELECT foo, bar, baz ...");
$stmt->bind_result($foo, $bar, $baz);
于 2013-05-23T19:15:20.487 回答
0

您必须考虑像这样一一存储列:

$stmt->execute();

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

或使用此答案中的代码,它为您提供所有列的数组,而无需相互指定。

于 2013-05-23T19:21:13.520 回答