foreach循环从不显示链接但是如果我删除了我的SELECT语句,则会显示$ key,可以在此处看到:http://www.rotaryswing.com/swingviewer/videos.php
我正在尝试根据下面的foreach循环中标识为$ key的ID动态创建链接。
显示所有信息正常。所有源代码都可以在这里找到: http://pastebin.com/hkC4L9UQ
我知道这不是我存储数据的方式,但我的知识缺乏如何以任何其他方式执行此操作。
使用implode然后以逗号分隔将ID插入到Db中。然后我像这样爆炸它们:
回显键本身就可以正常工作。
//convert video id array to single lines
$pieces = explode(",", $video_ids);
//iterate through video IDS in our DB
foreach ($pieces as $key) {
echo $key;
$query4 ="SELECT id, video_name, link, phase FROM videos WHERE id=$key";
if ($stmt4 = $mysqli->prepare($query4)) {
$stmt4->execute();
/* bind result variables */
$stmt4->bind_result($id, $vid_name, $vid_link, $phase);
/* fetch values */
while ($stmt4->fetch()) {
echo "<a href='http://www.rotaryswing.com/golf-instruction/video /rst-index.php?cat=$phase&subcat=Rotary%20Swing%20Tour&video=$id&id=$vid_link&name=$vid_name' target=\"blank\">" .$vid_name. "</a><br>";
}
}
}
您会在此页面上注意到三个数字的视频ID。其他工作正常。
谢谢!
答案 0 :(得分:0)
关于那些难以弄清楚的代码的一件事是你忽略了查询执行的成功,并假设它是成功的。 $stmt4->execute()
返回一个布尔值,表示它是否实际上是成功的。您应该检查它,如果失败,则记录/打印错误。
//convert video id array to single lines
$pieces = explode(",", $video_ids);
//iterate through video IDS in our DB
foreach ($pieces as $key) {
$sql ="SELECT id, video_name, link, phase FROM videos WHERE id=?";
if ($stmt = $mysqli->prepare($sql)) {
$stmt->bind_param("i", $key);
if ($stmt->execute()) {
$stmt->bind_result($id, $vid_name, $vid_link, $phase);
while ($stmt->fetch()) {
echo "<input type='checkbox' name='checkbox[]' id='$id' value='$id' />";
echo "<a href='http://www.rotaryswing.com/golf-instruction/video /rst-index.php?cat=$phase&subcat=Rotary%20Swing%20Tour&video=$id&id=$vid_link&name=$vid_name' target=\"blank\">$vid_name</a><br>";
}
}
else {
trigger_error("SQL query failed: " . $stmt->error, E_USER_ERROR);
}
}
}
现在,如果查询因某种原因失败,则会记录或打印错误,具体取决于您的服务器设置。
还要注意两件事。首先,我在那里使用参数化查询,这可以防止SQL注入。其次,我打算以理智的方式编写代码,使其比代码更容易阅读。