2017-04-11 5 views
0

私はこのタイプのSELECTを何度もやっていますが、今回はうまくいきません。どのようなアイデアをしてください?シンプルなSELECTを実行できません

あなたは、単にこのような変数をCONCATする必要が
$Name = "Dick"; 

$conn = mysqli_connect($server, $dbname, $dbpw, $dbuser); 

$sql = "SELECT id FROM table WHERE $Name = table.first_name"; 
$result = $conn->query($sql); 
$row = $result->fetch_assoc(); 
$customer_id = $row['id']; 
Database::disconnect(); 

echo "customer id = " . $customer_id; 
+1

@JohnConde:手続き型とオブジェクト指向のスタイルの使用中mysqli_fetch_array()との違いについてhttps://dev.mysql.com/doc/refman/5.5/en/keywords.html

より「後方」の部分が重要ではありません。 –

+0

[例外を有効にする](http://stackoverflow.com/questions/14578243/turning-query-errors-to-exceptions-in-mysqli)を忘れずにエラーを表示させてください。非常に特有のことは、 'Database :: disconnect()'呼び出しが行われていることですが、明らかにそれとは独立したハンドルを作成しました。 – tadman

+0

質問に追加したいエラーログがありますか? – Alfabravo

答えて

2

あなたが本当にtableという名前のテーブルを持っている場合は、戻って使用することがより適切であろうので、名前の周りにダニ単語TABLEreserved word in MySQLです。クエリはまだあなたのために動作しない場合

$sql = "SELECT `id` FROM `table` WHERE `first_name` = '$Name'"; 

その他の考えられる理由:それは文字列が含まれている場合、また、あなたの変数の周りの単一引用符を使用する必要があります

  1. あなたが接続パラメータを持っていることを確認してください正しい順序。それはmysqli_connect($server, $dbuser, $dbpw, $dbname)でなければなりません。
  2. 1行の結果が予想される場合は、fetch_assoc()の代わりにfetch_array()を使用する必要があります。
  3. mysqli()の代わりにmysqli_connect()を使用し、同時にオブジェクト指向のスタイル$result->を使用する場合は、PROCEDURAL STYLEとオブジェクト指向スタイルを混合しています。あなたは一つのスタイルを決めてそれに固執すべきです。

これは、クエリの手続きスタイルのようになります。私は以来、tableよりも、他のあなたのテーブルに何かを命名推薦

$Name = "Dick"; 
$conn = new mysqli($server, $dbuser, $dbpw, $dbname); 
$sql = "SELECT `id` FROM `table` WHERE `first_name` = '$Name'"; 
$result = $conn->query($sql); 

$row = $result->fetch_array(MYSQLI_ASSOC); 

$customer_id = $row['id']; // YOUR CUSTOMER ID 

$result->free(); // FREE RESULT SET 
$conn->close(); // CLOSE CONNECTION 

$Name = "Dick"; 
$conn = mysqli_connect($server, $dbuser, $dbpw, $dbname); // NOTE THE CHANGED ORDER OF CONNECTION PARAMETERS! 
$sql = "SELECT `id` FROM `table` WHERE `first_name` = '$Name'"; 
$result = mysqli_query($conn, $sql); 

$row = mysqli_fetch_array($result, MYSQLI_ASSOC); 

$customer_id = $row['id']; // YOUR CUSTOMER ID 

mysqli_free_result($result); // FREE RESULT SET 
mysqli_close($conn); // CLOSE CONNECTION 

そして、これは、オブジェクト指向のスタイルになります予約語なので、解析の問題に陥る可能性があります。フィールド名も同じです。もっと読み:http://php.net/manual/en/mysqli-result.fetch-array.php

+1

ありがとう、すべて。私は明らかに見逃した。私は '$ Name'を一重引用符で囲む必要がありました。 PDOとmysqliで動作しますが、セキュリティ上の理由からPDOを使用します。ありがとうございました! – Bricked

0

$sql = "SELECT id FROM table WHERE " . $Name . " = table.first_name"; 
+1

二重引用符を使用する場合、PHPではこれは必要ありません。 – yarwest

+0

ありがとうidk PHPの多くが、彼のためにこの作品。 –

+0

文字列( '$ Name')の引用符がまだありません。 –

1
$sql = "SELECT id FROM table WHERE '$Name' = table.first_name"; 
関連する問題