foreach循环和select语句

时间:2013-08-26 22:14:13

标签: php mysql

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。其他工作正常。

谢谢!

1 个答案:

答案 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注入。其次,我打算以理智的方式编写代码,使其比代码更容易阅读。