【发布时间】:2018-12-21 19:33:47
【问题描述】:
我想以数组(键/值对)的形式获取准备好的语句的完整结果,以便稍后在 str_replace() 函数中使用它。
我的表有三列,一个索引和字段“x1”和“x2”。我成功使用了以下内容:
$db = new mysqli("servername", "username", "pw", "dbname");
if($ps1 = $db->prepare("SELECT x1, x2 FROM my_table")) {
$ps1->execute();
$ps1->bind_result($search, $replace);
$result = array();
while ($ps1->fetch()) {
$result[$search] = $replace;
}
$ps1->close();
}
但是,我认为必须有一种更简单的方法,没有while 循环,得到完整的结果,而不是从单行一一相加。
我查看了其他问题,想出了以下问题,但它不起作用(“警告:mysqli_fetch_assoc() 期望参数 1 为 mysqli_result”):
if($ps1 = $db->prepare("SELECT x1, x2 FROM my_table")) {
$ps1->execute();
$result = mysqli_fetch_assoc($ps1);
return $result;
$ps1->close();
}
我也尝试了$result = mysqli_fetch_all($ps1);,但没有成功(得到“调用未定义函数 mysqli_fetch_all()”)。
顺便说一句,我使用的是 PHP 5.6。
在 cmets 中有关 MYSQLND 的一些答案和讨论后添加:
phpinfo() 在其mysqlnd 部分显示以下信息:
加载的插件: mysqlnd,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password,auth_plugin_sha256_password
【问题讨论】:
-
不确定为什么会出现该错误。不过,您应该全程使用 OOP。不过,该函数 php.net/manual/en/mysqli-result.fetch-assoc.php 仍然只返回 1 行。可以试试php.net/manual/en/mysqli-result.fetch-all.php。
-
php.net/manual/en/mysqli.error.php 是否提供更多关于为什么
$ps1不是结果对象的信息? -
@user3783243 感谢您的回答!我尝试了
$result = mysqli_fetch_all($ps1);,但没有成功(“调用未定义的函数 mysqli_fetch_all()”)。抱歉,这个我慢。你能推荐一段代码吗? -
您使用的是什么 PHP 版本?此外,我认为您仍然会遇到
$ps1的问题,因为基于该错误它不是结果对象,请尝试printf("Errormessage: %s\n", $ps1->error);。 -
我更多的是 PDO 用户,这正在离开我的专业领域,但查看其他论坛/线程,似乎需要配置
mysqlnd
标签: php sql arrays mysqli prepared-statement