在WHILE之前拉入连接表数据

时间:2015-01-23 04:59:07

标签: php mysql while-loop

我非常擅长MySQL和PHP写作。我遇到的问题是在while行之前从特定表中提取数据。我目前的代码是

$query_join_tables  = "SELECT m.*, c.id, c.firstname, c.lastname, 
                        IFNULL(m.system_customer,c.id) AS client_id
                        FROM ... AS m
                        LEFT
                        JOIN ... as c
                        ON m.system_customer = c.id
                        WHERE system_customer=".$clientid."
                        ORDER BY system_id ASC";

$result = mysql_query($query_join_tables);
if (!$result) {
    die('Invalid query: ' . mysql_error());
}

echo "BLA BLA BLA";

while($row = mysql_fetch_array($result)){

    echo "MORE BLA BLA";

问题在于,当我试图在while线之前拉出桌子时,它不会拉动。如果我拉后,它就可以正常工作。

不起作用:

echo ".$row['firstname'].";
while($row = mysql_fetch_array($result)){

工作:

while($row = mysql_fetch_array($result)){
    echo ".$row['firstname'].";

此外,在提到mysqli或PDO之前 - 我不能这样做。我正在编写一个加密和硬编码的模块。

3 个答案:

答案 0 :(得分:0)

你会感到愚蠢。 $ row变量尚未获取所获取的行。当行

$row = mysql_fetch_array($result)
运行

,即将一行的数据提供给$ row。在此点之前调用$ row只会给你一个空值。

每次while循环再次启动时,它都会获得一个新行。这被称为ITERATOR。它一次向下移动一行列表,直到它运行并且什么也没找到。那就是它将退出循环。

编辑(01/23/2015):现在,我了解到您确实希望有两个循环使用相同的结果。我将展示如何重置迭代器。

while($row = mysql_fetch_array($result)) {Do Stuff}

mysql_data_seek($result, 0);

while($row = mysql_fetch_array($result)) {Do Stuff}

希望这有帮助。

答案 1 :(得分:0)

不推荐使用mysql扩展,将来会删除它。使用mysqli。请尝试以下代码。

$con = mysqli_connect("localhost","root","","dbname");

$query_join_tables = "SELECT m.*, c.id, c.firstname, c.lastname, 
IFNULL(m.system_customer,c.id) AS client_id
FROM ... AS m
LEFT
JOIN ... as c
ON m.system_customer = c.id
WHERE system_customer=".$clientid."
ORDER BY system_id ASC";

$result = $con->query($query_join_tables);

$row = mysqli_fetch_array($result,MYSQLI_ASSOC);
echo $row["firstname"];
$conn->close();

答案 2 :(得分:0)

好的,试试吧。它应该工作。

mysql_connect("localhost", "root", "") or
die("Could not connect: " . mysql_error());
mysql_select_db("dbName");

$query_join_tables = "SELECT m.*, c.id, c.firstname, c.lastname, 
IFNULL(m.system_customer,c.id) AS client_id
FROM ... AS m
LEFT
JOIN ... as c
ON m.system_customer = c.id
WHERE system_customer=".$clientid."
ORDER BY system_id ASC";

$result = mysql_query($query_join_tables);
$res = mysql_fetch_array($result);
echo $res['vBookName'];

mysql_free_result($result);