-3

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 以三个数字为一组。其他一切都很好。

谢谢!

4

1 回答 1

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 注入。其次,我以理智的方式编写了代码,这比您的代码更容易阅读。

于 2013-08-26T22:46:13.263 回答