我正在尝试这段代码:
if ($result = $this->mysqli->prepare("SELECT * FROM `mytable` WHERE `rows1`=?"))
{
$result->bind_param("i",$id);
$result->execute();
while ($data = $result->fetch_assoc())
{
$statistic[] = $data;
}
echo "<pre>";
var_dump($statistic);
echo "</pre>";
}
Run Code Online (Sandbox Code Playgroud)
但它抛出以下错误
[Fri Jun 15 12:13:11 2012] [error] [client 127.0.0.1] PHP致命错误:在[myfile.php]中调用未定义的方法mysqli_stmt :: fetch_assoc()
而且我也尝试过:
if ($result = $this->mysqli->prepare("SELECT * FROM `mytable` WHERE `rows1`=?"))
{
$result->bind_param("i",$id);
$rows = $result->execute();
while ($data = $rows->fetch_assoc())
{
$statistic[] = $data;
}
echo "<pre>";
var_dump($statistic);
echo "</pre>";
}
Run Code Online (Sandbox Code Playgroud)
这使得:
[Fri Jun 15 12:22:59 2012] [错误] [client 127.0.0.1] PHP致命错误:在[myfile.php]中的非对象上调用成员函数fetch_assoc()
我还能做些什么来获得结果或我做错了什么?我需要DB中的assoc数组看起来像$data[0]["id"] = 1
Dav*_*dom 23
事实上,你可以很容易地做到这一点,你只是不能用mysqli_stmt
对象做,你必须提取底层mysqli_result
,你可以通过简单的调用来做到这一点mysqli_stmt::get_result()
.注意:这需要mysqlnd(MySQL Native Driver)扩展,这可能并不总是可用.
但是,关于在MySQLi上推荐PDO的观点仍然存在,这就是原因的一个主要例子:MySQLi userland API毫无意义.我花了几年时间间歇地使用MySQLi来发现上面概述的机制.现在,我承认分离语句和结果集概念确实有意义,但在这种情况下,为什么语句有一个fetch()
方法?深思熟虑(如果你仍然坐在MySQLi和PDO之间的栅栏上).
为了完整起见,这里是一个代码示例(松散地)基于问题中的原始代码:
// Create a statement
$query = "
SELECT *
FROM `mytable`
WHERE `rows1` = ?
";
$stmt = $this->mysqli->prepare($query);
// Bind params and execute
$stmt->bind_param("i", $id);
// Extract result set and loop rows
$result = $stmt->get_result();
while ($data = $result->fetch_assoc())
{
$statistic[] = $data;
}
// Proof that it's working
echo "<pre>";
var_dump($statistic);
echo "</pre>";
Run Code Online (Sandbox Code Playgroud)
你可以做:
$conn = mysqli_connect('host','username','password','database')
$query = 'select * from tablename';
$result = $conn->query($query);
$data = mysqli_fetch_all($result,MYSQLI_ASSOC);
Run Code Online (Sandbox Code Playgroud)
$data
包含assoc数组中的所有结果.
*应该注意,此mysqli_fetch_all()
功能仅适用于mysqlnd
包.
http://php.net/manual/en/mysqli-result.fetch-all.php
我不喜欢 Mysqli,但你可以在准备时这样做。
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$db = new mysqli('hostAddress', 'username', 'password', 'databaseName');
$db->set_charset('utf8mb4');
$userID = 2;
$stmt = $db->prepare("SELECT * FROM users WHERE ID = ?");
$stmt->bind_param("i", $userID);
// because the variable is bound by reference you can assign the value after binding, too
//$userID = 2;
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)
如果你想要结果;
$result = $stmt->get_result();
$user = $result->fetch_array(MYSQLI_ASSOC); //one row
Run Code Online (Sandbox Code Playgroud)
或多行
$users = $result->fetch_all(MYSQLI_ASSOC);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
65453 次 |
最近记录: |