1

同じテーブルから2つのクエリがあり、同じ情報を選択していますが、結果を2つの名前に送信しています。結果を保存する変数は2つありますが、クエリからの他の情報を保存するにはどうすればよいですか?

require_once('connectvars.php');
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die('Error connecting to server, line 20.');
$query = "SELECT COUNT(id)  FROM artwork"; //find total number of id's
$result = mysqli_query ($dbc, $query) or die("query error, line 22");
$row = mysqli_fetch_array ($result, MYSQL_NUM);
find_pic(); //get the two id numbers
while ($count1 = $count2 or name = ""){ //problem line. check if counts = each other or either name = nothing
    find_pic(); //if true, run function again
}
while ($count1=37 or $count2=37){ //if either count = 37
    find_pic(); //if true, run function again
}
show_pic();

function find_pic(){
    $count1 = rand(0,$row[0]);
    $count2 = rand(0,$row[0]);
    $query1 = "SELECT * FROM artwork WHERE id = $count1";
    $query2 = "SELECT * FROM artwork WHERE id = $count2";
    $result1 = mysqli_query ($dbc, $query1) or die("query error, line 38");
    $result2 = mysqli_query ($dbc, $query2) or die("query error, line 39");
}
4

3 に答える 3

1

これを試してください(これは問題の完全な解決策ではなく、唯一の助けです):

$result1 = $dbc->prepare("SELECT * FROM artwork WHERE id = $count1");
$result2 = $dbc->prepare("SELECT * FROM artwork WHERE id = $count2");
$result1->execute();
$result2->execute();
$result1->bind_result($column1, $column2);   //all columns from table artwork
$result2->bind_result($column1, $column2);   //...


while ($result1->fetch())
{
    echo $column1;                       //here u have your result data
        echo $column2;

};

プリペアドステートメントの使い方を学びましょう!!!! http://php.net/manual/en/mysqli-stmt.bind-param.php

于 2013-03-26T22:24:13.370 に答える
0

1.比較するのではなく、割り当てます

while ($count1 = $count2 or name = ""){ //problem line. check if counts = each other or either name = nothing
    find_pic(); //if true, run function again
}
while ($count1=37 or $count2=37){ //if either count = 37
    find_pic(); //if true, run function again
}

単一=のsに注意してください?2つ(または3つ)必要です:

while ($count1 == $count2 or name == ""){ //problem line. check if counts = each other or either name = nothing
    find_pic(); //if true, run function again
}
while ($count1==37 or $count2==37){ //if either count = 37
    find_pic(); //if true, run function again
}

このため、実行中のスクリプトが壊れているよりも優れた解析エラーが発生するのではなく、実行することをお勧めし'' == $nameます$name == '''' = $name

2.あなたはに渡っ$rowていませんfind_pic()

ほとんどの変数はスコープの対象です。パラメータとして渡さない限り$row、関数内には存在しません。find_pic

function find_pic($row){
    $count1 = rand(0,$row[0]);
    $count2 = rand(0,$row[0]);
    $query1 = "SELECT * FROM artwork WHERE id = $count1";
    $query2 = "SELECT * FROM artwork WHERE id = $count2";
    $result1 = mysqli_query ($dbc, $query1) or die("query error, line 38");
    $result2 = mysqli_query ($dbc, $query2) or die("query error, line 39");
}

find_pic($row);

3.$count1および$count2は定義されていません

関数内で設定していfind_picますが、そのスコープ外には存在しません。参照を使用することをお勧めします。

function find_pic($row, &$count1, &$count2){
    $count1 = rand(0,$row[0]);
    $count2 = rand(0,$row[0]);
    $query1 = "SELECT * FROM artwork WHERE id = $count1";
    $query2 = "SELECT * FROM artwork WHERE id = $count2";
    $result1 = mysqli_query ($dbc, $query1) or die("query error, line 38");
    $result2 = mysqli_query ($dbc, $query2) or die("query error, line 39");
}

find_pic($row, $count1, $count2);
于 2013-03-26T22:22:36.817 に答える
0

全体のポイントが2つのランダムな写真を取得することである場合、なぜこれをしないのですか?

SELECT
    *
FROM
    artwork
WHERE 
    id != 37 AND
    name != ''
ORDER BY 
    RAND()
LIMIT 2
于 2013-03-26T22:23:33.143 に答える