我有以下代码,它使用预准备语句执行MySQL查询:
$selectStatement = "SELECT " . implode(", ", $allFields); // cat select w/ allFields
$stmnt = $mysqli->prepare($selectStatement .
"FROM Musicians WHERE name = ?");
$stmnt->bind_param('s', $name);
$stmnt.execute();
此时,我读过的大部分内容都告诉我,我应该在$ stmnt上使用bind_result()
然后fetch()
。但是,我更喜欢使用填充值的数组,而不是像fetch()
那样迭代一堆转储变量。有没有办法在使用准备好的语句和结果时获得类似于fetch_assoc()
给我的东西?
答案 0 :(得分:3)
你是对的,要使用熟悉的fetch()与mysqli,首先必须调用get_result()并且它并不总是可用。
更不用说你没有一些复杂的代码也不能绑定可变数量的占位符
这使 mysqli 绝对无法使用与预备语句。
所以,有两个解决方案。
对于第一个选项,请选择PDO 与mysqli不同,它有everything you need from mysqli and much more.
$stm = $pdo->prepare("SELECT * FROM Musicians WHERE name = ?");
$stm->execute(array($name));
$row = $stm->fetch(); // or fetchAll() depends on the numer of rows expected.
对于第二个,您可以使用手动处理的占位符 这种方法比PDO更有用,PDO是一个非常简洁的代码:
$row = $db->getRow("SELECT * FROM Musicians WHERE name = ?s",$name);
答案 1 :(得分:0)
添加解决方案以澄清:
如果我们可以在开始时选择服务器,我更喜欢使用php-mysqlnd模块,而不是php-mysql模块,用于PHP。然后,我们可以使用:
...
$stmnt.execute();
$res = $stmnt->get_result();
$row = $res->fetch_assoc();
这对我来说似乎更简单。