2016-04-18 2 views
-1

私は複数のクエリを選択し、どちらが機能するかを選択します。最初のクエリは簡単です。複数のクエリを使用して間違った配列を選択していますか?

$sql = "SELECT riskAudDate, riskClientId, RiskNewId FROM tblriskregister ORDER BY riskId DESC LIMIT 1;"; 

もう一つは、私は自分自身でそれを行う場合でも動作するようには思えません。私はLASTを取り除く

$sql ="SELECT LAST(riskFacility) FROM tbleClients"; 

場合は、テーブルのフィールドの最初のエントリを返します。 。私はそのフィールドで最後のエントリを取得するためにLASTを使用したいと思います。

最初のクエリを実行すると、データが返され、それを画面にエコーすることができます。私が2番目のものを追加すると(私は最後から)何も得られません。ここでは私が使用しているものは

$result = $conn->query($sql);  
if ($result == TRUE){  
    $r = $result->fetch_array(MYSQLI_ASSOC); 
    echo $r['riskAudDate']; 
    echo $r['riskClientId']; 
    echo $r['RiskNewId']; 
    echo $r['riskFacility']; 
    echo "<pre>"; 
    print_r($r); 
    echo "</pre>"; 
} 

最後のビットは、私がアレイの中の何を見てテストするためのものです。 私はその結果配列が正しくないことを考え出しました。 私はこの取得するマルチクエリに実際のクエリを変更する場合:

Call to a member function fetch_array() on boolean 

をだから、アレイビットは、マルチクエリに対して間違っているようです。返されるデータは各テーブルから1行です。それは一番上のクエリでは動作しますが、二番目のクエリを追加します(これは確かではありません)、すべてがクラッシュします。だから私はそれが2つの部分の質問だと思う。私のインサートに何が間違っていて、返された配列に何が間違っていますか?私はあまり間違っていない場合

+0

何"マルチクエリー"?あなたはすぐに2つの選択肢を実行しようとしており、そこから結果を得ることができますか? –

+0

結果がない場合、 'fetch_array'は' null'を返します。 –

+0

申し訳ありませんが、私は削除していた事が個別にここでそれらをテストするために適切なものである:$ sqlを= "riskId DESCのLIMIT 1 BY ORDER tblriskregister FROM riskAudDate、riskClientId、RiskNewIdを選択し、"; $ sql。= "SELECT riskFacility FROM tbleClients"; –

答えて

2
  1. は、MySQLにはlast()機能はありません、それだけで、MSアクセスでサポートされています。 mysqlでは、1番目のクエリで何をすることができますか?結果を1に制限して結果を制限します。

  2. エラーメッセージによると、$conn->query($sql)は真偽値を返しますそれには$result->fetch_array(MYSQLI_ASSOC)があります。私たちは$ SQL変数に正確に何があるのか​​わからないので、$conn->query($sql)がブール値を返す理由を調べるためにコードをデバッグする必要があると私は言うことができます。

  3. mysqli_query()のドキュメントからはっきりとしているわけではありませんが、一度に1つのクエリの実行のみをサポートしています。一度に複数のクエリを実行するには、mysqli_multi_query()を使用してください(これはOOモードでも呼び出すことができます)。しかし、セキュリティ上の理由から、私はむしろmysqli_query()を別々に2回呼び出すことになります。複数のクエリを実行できない場合は、SQLインジェクション攻撃を成功させるのがより難しくなります。

+0

これは、複数のクエリ '$ sqlから返されたものです。リスクリスクID、リスククライアントID、RiskNewIdからFROM tblriskregister ORDER BYリスクIDD制限1、リスクターゲットからFROM tbleClients ORDER BY riskFacility DESC LIMIT 1' –

+0

ごめんなさいあなたのコメントが意味します。 – Shadow

1

私は一度に2つのSQLクエリを実行しようとしているようです。 これは不可能です。それぞれのSQLクエリに対して別々に実行してください。

$result = $conn->query($sql); 
if ($result == TRUE){  
    while($r = $result->fetch_array(MYSQLI_ASSOC)) { 
     ... 
    } 
} 

$sql ="SELECT LAST(riskFacility) FROM tbleClients"; 

を最後の関数は、MySQLに存在していないので(私はあなたが最後に何を意味するかわからないので)私はこのようなソートを行うことをお勧め

$sql ="SELECT riskFacility FROM tbleClients order by riskFacility desc limit 0,1"; 
+0

MySQLのマニュアルは、私が取得するためにソートを使用しているhttp://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.quickstart.multiple-statement.htmlそして感謝、あなたがそれを行うことができますと言います私が欲しいレコード。 –

+0

はい、それは使用しています - 異なるアプローチである> fetch_all(MYSQLI_ASSOC) - > multi_queryの($ sqlを)と - >のstore_result()してから。もしあなたが好きなら私はその答えを再構成することができます – snitch182

+0

私たちは進歩しています。私は複数のクエリを使用して、私が戻ってほしい結果を得る。私は返されているものを画面に出力するためにvar_exportを使用しています。このアイブ氏が得たものである: '(0 =>配列( ' 'ダウンボブriskAudDate' => '18 -04-2016'、 'riskClientId'=> 'RiskNewId'=> '1'、)、)配列(私は今、それらを使用するために、リスククライアント、RiskNewId、およびリスクファシリティを変数として配列から取得する必要があります。ここに私はこだわって来た。 –

関連する問題