我正在尝试这段代码:
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>";
}
但它引发了以下错误
[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>";
}
这使得:
[2012年6月15日星期五12:22:59] [错误] [客户端127.0.0.1] PHP致命错误: 在非对象中调用成员函数fetch_assoc() [myfile.php]
我还能做些什么来获得结果或我做错了什么?我需要DB中的assoc数组看起来像$data[0]["id"] = 1
答案 0 :(得分: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>";
答案 1 :(得分:7)
你可以这样做:
$conn = mysqli_connect('host','username','password','database')
$query = 'select * from tablename';
$result = $conn->query($query);
$data = mysqli_fetch_all($result,MYSQLI_ASSOC);
$data
包含assoc数组中的所有结果。
*应该注意,此mysqli_fetch_all()
函数仅适用于mysqlnd
包。
http://php.net/manual/en/mysqli-result.fetch-all.php
答案 2 :(得分:0)
我不喜欢Mysqli,但是您可以在准备时这样做。
$db = new mysqli('hostAddress', 'username', 'password', 'databaseName');
$db->set_charset('UTF8');
$userID = 2;
$stmt = $db->prepare("SELECT * FROM users WHERE ID = ?");
$stmt->bind_param("i", $userID);
$stmt->execute();
如果您想要结果;
$result = $stmt->get_result();
$user = $result->fetch_array(1); //one row
或多行
$users = $result->fetch_all(1);
答案 3 :(得分:-1)
没有尝试过但是用以下内容改变你的while循环条件并再次测试
$data = $result->fetch()
感谢
答案 4 :(得分:-1)
方法execute()返回TRUE或FALSE而不是结果集,因此,不能使用fetch_assoc方法,因为它在布尔值上不存在。你需要的是
mysqli_fetch_assoc($result); //Use in association with query();
如果您愿意,我可以向您发送示例代码。 希望这会有所帮助。
答案 5 :(得分:-1)
这只是一个样本:
class admin{
public static function admin($con){
$users = $con -> query("SELECT * FROM felhasznalok");
$show = $users-> fetch_all(MYSQLI_ASSOC);
return $show;
}
}
$con = new mysqli("localhost", "root", "", "teszt");
$s = admin::admin($con);
echo "<table > ";
if (is_array($s)) {
foreach ($s as $key => $value) {
echo "<tr>";
foreach ($value as $key2 => $value2) {
echo "<td><strong>$key2: </strong> $value2</td>";
}
echo "</tr>";
}
echo "</table>";
}
?>