我必须承认mysqli_query()手动条目不包含有关如何获取多行的简洁示例.可能是因为常规是常规的,几十年来PHP人都知道:
$result = mysqli_query($link,"DESCRIBE students");
while ($row = $result->fetch_assoc())
{
foreach($row as $value) echo "
$value";}
如果要打印列标题,则必须先将数据选择为嵌套数组,然后使用第一行的键:
// getting all the rows from the query
// note that handy feature of OOP syntax
$data = $link->query("DESC students")->fetch_all(MYSQLI_ASSOC);
// getting keys from the first row
$header = array_keys(reset($data));
// printing them
foreach ($header as $value) echo "
$value";// finally printing the data
foreach ($data as $row)
{
foreach($row as $value) echo "
$value";}
某些主机可能不支持fetch_all()函数.在这种情况下,通常填充$data数组:
$data = array();
$result = mysqli_query($link,"DESC students");
while ($row = $result->fetch_assoc())
{
$data[] = $row;
}
我必须补充两个重要的注意事项.
>你必须自动使mysqli抛出错误,而不是手动检查每个mysqli语句.为此,请在mysqli_connect()之前添加以下行:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
>最重要的注意事项:与mysql_query()不同,mysqli_query()的使用非常有限.仅当查询中不使用变量时,才可以使用此函数.如果要使用任何PHP变量,你永远不应该使用mysqli_query(),但总是坚持prepared statements,如下所示:
$stmt = $mysqli->prepare("SELECT * FROM students WHERE class=?");
$stmt->bind_param('i', $class);
$stmt->execute();
$data = $stmt->get_result()->fetch_all();
我不得不承认,这有点罗嗦.因此,对于日常使用,不必使用mysqli函数,而是必须采用某种类型的包装器,它将隐藏所有重复的代码.有许多包装,但我认为我自己是最好的^ _ ^.它被称为Safemysql,它将让您立即编写安全和简洁的代码:
$data = $db->getAll("DESCRIBE ?n", $table);
但如果您不喜欢使用第三方库,那么请坚持使用PDO.