gpt4 book ai didi

php - PHP 中只有 1 个字符的 foreach 循环结果

转载 作者:可可西里 更新时间:2023-11-01 00:38:41 25 4
gpt4 key购买 nike

你好,我有这个 foreach 循环,它给出了奇怪的结果,它只显示数据库记录中的第一个字符

<?php
$result2 = mysql_query("SELECT id,fp_thumb,title FROM media") or die(mysql_error());
$data2 = mysql_fetch_array($result2) or die(Mysql_error());

foreach ($data2 as $val) {

echo '<li><a href="media.php?id='.$val['id'].'"><img src="'.$val['fp_thumb'].'" alt="'.$val['title'].'" /></a></li>';
}
?>

这是我的数据库结构

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for media
-- ----------------------------
CREATE TABLE `media` (
`id` int(11) NOT NULL auto_increment,
`thumb` varchar(500) NOT NULL,
`url` varchar(500) NOT NULL,
`fp_thumb` varchar(500) NOT NULL,
`title` varchar(500) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `media` VALUES ('1', '22', 'http://goeshere.com', '/images/slideshow/ctmbs.jpg', 'Test 1');
INSERT INTO `media` VALUES ('2', '2', 'http://goeshere1.com', '/images/slideshow/hitlex.jpg', 'test 2');
INSERT INTO `media` VALUES ('3', '3 ', 'http://goeshere2.com', '/images/slideshow/tsord.jpg', 'test 3');

任何信息都会有用提前致谢并干杯^^

最佳答案

根据代码,我会说 $data2 代表数据库中 1 行的数据。

因此,它应该是 $data2 包含您要显示的内容。

你的 foreach 循环没有用:如果你想显示 1 行的数据,你可以直接使用 $data2


如果要逐行进行,则不能迭代 $data2,而是在 mysql_fetch_array 返回数据时循环。

像这样,我会说:

$result2 = mysql_query("SELECT id,fp_thumb,title FROM media") or die(mysql_error());
while ($data2 = mysql_fetch_array($result2)) {
echo '<li><a href="media.php?id='.$data2['id'].'"><img src="'.$data2['fp_thumb'].'" alt="'.$data2['title'].'" /></a></li>';
}

此外,您可能希望对输出的数据进行转义,以确保您没有任何类型的 HTML/javascript 注入(inject)——至少在 src 和标题中,我会说;为此,您可以使用 htmlspecialchars

那么你的 echo 可能看起来像这样:

echo '<li><a href="media.php?id='
. $data2['id']
. '"><img src="'
. htmlspecialchars($data2['fp_thumb'])
. '" alt="'
. htmlspecialchars($data2['title'])
. '" /></a></li>';

(我认为 id 是一个整数,自动递增或类似的东西,所以风险不大)


看到另一个答案的评论后编辑

用你第一次使用的:

$data2 是一个关联数组,看起来像这样:

array
'id' => int 152
'title' => string 'this is the title' (length=17)
'fp_thumb' => string 'http://...../' (length=13)

这意味着 foreach 将循环三次,并且 $val 将是:

int 152
string 'this is the title' (length=17)
string 'http://...../' (length=13)

(每次迭代一个值)

也就是说,$val 不是一个数组,而是一个标量值。


当你这样做时:

$a = 152;
var_dump($a['id']);

你得到了

null

做的时候

$a = 'this is the title';
var_dump($a['id']);

你得到:

string 't' (length=1)

即,在字符串上使用数组访问时,您只能获得第一个字符,键是字符串。


请注意,使用数字键对字符串进行数组访问用于访问数组的一个字符:

$a = 'this is the title';
var_dump($a[3]);

让你:

string 's' (length=1)


有关更多信息,请参阅有关字符串的手册页,尤其是 String access and modification by character ,其中指出:

Characters within strings may be accessed and modified by specifying the zero-based offset of the desired character after the string using square array brackets, as in $str[42]. Think of a string as an array of characters for this purpose.

和:

Non-integer types are converted to integer.

并将“标题”转换为整数得到 0 ;所以,你得到了字符串的第一个字符。


希望这会有所帮助,并且您了解“为什么”;-)

关于php - PHP 中只有 1 个字符的 foreach 循环结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1349254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com