Joh*_*nes 14 php sql arrays mysqli prepared-statement
我希望将预准备语句的完整结果作为数组(键/值对)得到,以便稍后在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();
}
Run Code Online (Sandbox Code Playgroud)
但是,我认为必须有一个更简单的方法,没有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();
}
Run Code Online (Sandbox Code Playgroud)
我也试过$result = mysqli_fetch_all($ps1);没有成功(获得"调用未定义的函数mysqli_fetch_all()").
顺便说一下,我使用的是PHP 5.6.
关于MYSQLND的评论中的一些答案和讨论之后的补充:
phpinfo()在其mysqlnd部分中显示以下信息:
加载的插件:mysqlnd,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password,auth_plugin_sha256_password
你尝试过这样的事情吗?
$db = new mysqli("servername", "username", "pw", "dbname");
if($ps1 = $db->prepare("SELECT x1, x2 FROM my_table")) {
$ps1->execute();
$result = $ps1->fetchAll(PDO::FETCH_NAMED);
$ps1->close();
}
Run Code Online (Sandbox Code Playgroud)
我的意思是这样(如果你已经安装了mysqlnd驱动程序)
<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$query = "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT 150,5";
if ($stmt = mysqli_prepare($link, $query)) {
/* execute statement */
mysqli_stmt_execute($stmt);
/* get result object */
$result = mysqli_fetch_all(mysqli_stmt_get_result($stmt));
/* close statement */
mysqli_stmt_close($stmt);
}
/* close connection */
mysqli_close($link);
?>
Run Code Online (Sandbox Code Playgroud)