我是第一次将查询转换为预处理语句,而我无法弄清楚如何提取数据......
这是我的代码:
/* 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'] ?>
我在这里缺少什么?如何从该查询中显示随机字段名称?
谢谢!
答案 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中的代码,它会为您提供所有列的数组,而不会相互指定。