选择2个表,但输出全部从1和第二个表只有1 - php mysql

时间:2014-08-27 16:22:48

标签: php mysql

这是我的代码:

<?php
global $liID, $liClass;
$liV = "SELECT * FROM css";
$li1 = mysqli_query($connect,$liV);
$li = mysqli_fetch_array($li1);
$liID = $li['liID'];
$liClass = $li['liClass'];

$post = "SELECT * FROM post ORDER BY id DESC LIMIT 5";
$post1 = mysqli_query($connect,$post);
$postV = mysqli_fetch_array($post1);

do {
    printf("<a href='view.php?id=%s'><li id='%s' class='%s'><img src='%s'><div class='tip'><h5>%s</h5></div></li></a>",$postV['id'],$li['liID'],$li['liClass'],$postV['slimg'],$postV['title']);
}
while ($postV = mysqli_fetch_array($post1) && $li = mysqli_fetch_array($li1));

?>

结果是,我只有“css”的数据完全符合我的需要, 但是从“帖子”我只有一个数据。

1 个答案:

答案 0 :(得分:0)

你的逻辑非常糟糕。您的while()条件 NOT 执行您期望的操作,并且正在被解析/执行

while($postV = (fetch($post1) && ($li = fetch($li1)))) {

注意括号的位置。 $postV获取两次提取调用的布尔值&&的结果。只要两者都返回非假值,$ postV就会变成布尔值TRUE。例如它相当于:

$x = 'foo';
$y = 'bar';
$p = $x && $q = $y;
var_dump($p);

这将输出一个布尔值true,而不是foo,因为你期待它。

请改为尝试:

while (($postV = mysqli_fetch_array($post1)) && ($li = mysqli_fetch_array($li1)));
       ^-----------------------------------^    ^------------------------------^

注意指示的额外括号。