我写了下面的代码:
$release_id = intval(filter_var($_GET["rid"],FILTER_SANITIZE_STRING));
$query = "select * from press_releases where id = {$release_id}";
$result = $db->query($query);
$row = $result->fetch_assoc();
list($id, $short_description, $description, $created_date) = $row;
$db->close();
我正在使用html标记内的$description
,$short_description
等变量,但没有显示。如果我使用下面的代码,除list()
函数之外的代码相同:
$release_id = intval(filter_var($_GET["rid"],FILTER_SANITIZE_STRING));
$query = "select * from press_releases where id = {$release_id}";
$result = $db->query($query);
$row = $result->fetch_assoc();
$id = $row["id"];
$short_description = $row["short_description"];
$description = stripslashes(html_entity_decode($row["description"]));
$created_date = $row["created_date"];
$db->close();
它完美无缺。基本上list()
函数无法分配来自$row
数组的值。
我不明白为什么?
答案 0 :(得分:5)
根据list()
的{{1}}:
list()
仅适用于数值数组 并假设数字指数 从0开始。
答案 1 :(得分:4)
我不相信list()
函数适用于关联数组。尝试正常获取查询结果(数字索引),看看是否能解决问题。
答案 2 :(得分:3)
这是适合关联结果的那个。并且您不应该将它与SELECT *
一起使用,而应该使用SELECT varname1,varname2,varname3
的具体列表,这样您就不会得到意外的局部变量。
也可以使用extract(array_intersect_key(..))
来获取要提取的过滤变量列表,但这对于您可以控制的数据库结果集来说是过度的。
答案 3 :(得分:2)
对此的一个相当简单的解决方案如下:
list($id, $short_description, $description, $created_date) = array_values($row);
或者只是不作为assoc获取,而是作为普通数组。
我必须说我不建议这样做。由于您的SQL查询是使用*
获取的,因此它很容易中断 - 让我们说无论出于何种原因,其中一列被改组,因此它出现在表中的某个其他位置。的Bam
假设您要在查询中单独定义每个列,那就没问题了。
答案 4 :(得分:1)
使用fetch_row
而不是fetch_assoc
,see the example。 关联哈希数组没有明确定义的元素顺序!
答案 5 :(得分:1)
我的猜测是list()
期望数字索引的数组。尝试使用
而是$row = $result->fetch_row();
答案 6 :(得分:1)
list()
期望一个索引数组,而不是关联数组。尝试使用fetch_row()
。
答案 7 :(得分:1)
像这样使用array_values:
list($id, $short_description, $description, $created_date) = array_values($row);
阅读kevin在php.net上here的评论。
答案 8 :(得分:1)
list
仅适用于数字索引数组。在分配之前将fetch_assoc切换到fetch_row或在$ row上使用array_values:
$row = $result->fetch_row();
或
list($id, $short_description, $description, $created_date) = array_values($row);