2

FacebookAPI呼び出しから返された配列から抽出された現在のFacebookユーザーのIDである値を使用してPHP変数$idを定義しました。

$id = $userInfo[id]; 

変数の値をエコーし​​、データベースに正しい値を正常に格納できるため、変数が正しく宣言されていると確信しています。

mysqlクエリのwhere句で使用して、IDやその他のデータが格納されているデータベーステーブルからレコードを返すことに失敗しました。where句を追加するまで、クエリは期待される結果を返すので、これが私の構文だと思います。 $idに関連します。フィルタリングしている列の名前もidです。私が試した構文はどれも機能しませんでした。次のようなものがあります。

WHERE id = $id
WHERE id = '$id'
WHERE id = "$id"

私はここ数日、解決策を探して、一重引用符、二重引用符、および小数のすべての組み合わせを試しました。

編集(作者のコメントから取ったコード)

mysql_select_db($database_YOUR_giftbox, $YOUR_giftbox); 
$query_user_data = "SELECT date, event FROM events WHERE id = $id ORDER BY date ASC"; 
$user_data = mysql_query($query_user_data, $YOUR_giftbox) or die(mysql_error()); 
$row_user_data = mysql_fetch_assoc($user_data); 
$totalRows_user_data = mysql_num_rows($user_data); 
4

5 に答える 5

2

何かを想定して、例を拡張します。PHP 変数を含む完全なクエリは次のようになります (非常に基本的な例)。

$query = "SELECT name, another_field FROM users WHERE id = " . $id;

それidは、データベース内の整数である場合です。何らかの理由で何らかの文字列である場合、次のようになります。

$query = "SELECT name, another_field FROM users WHERE id = '" . $id . "'";

次のように PHP 変数を中かっこで囲むこともできます (整数の場合)。

$query = "SELECT name, another_field FROM users WHERE id = {$id}";

またはこれ(文字列の場合):

$query = "SELECT name, another_field FROM users WHERE id = '{$id}'";

ただし、そのメソッドを使用する場合は、$query宣言全体を ではなく でラップする必要があること"に注意してください'

于 2012-08-19T02:29:02.550 に答える
1

PHP と MySQL を使い始めたばかりのように思われるので、新しいアプリケーションでは使用しないでください mysql_queryクエリは次のようになります。

SELECT * FROM something WHERE id=?

次のようにもなります。

SELECT * FROM something WHERE id=:id

これは、mysqliまたは PDO を使用してSQL エスケープを行う方法によって異なります。いくつかの方法がありますので、自分のスタイルに最も適した方法を見つけて、一貫して適用してみてください。この非常に重要なスキルを習得したことを後悔することはありません。それなしで自分がどのような危険にさらされているかを知らなければ、後悔するでしょう。

クエリが常に有効であり、誰かが自動 SQL インジェクション ツールを使用するのを待っているだけで、アプリケーションに巨大なギャップが生じないようにするために、人々が何の注意も払わずに「答え」を与えるのは恐ろしいことです。

必要な種類のクエリを作成し、mysql>コマンド ラインでテストしてから、アプリケーションでまったく同じことを行うテンプレート バージョンを作成できるはずです。MySQL は通常、数字に関しては非常にカジュアルで、引用符を付けても付けなくてもかまいません。必要に応じて変換しますが、文字列は常に正しくエスケープする必要があります。そうしないと、重大な結果が生じる可能性があります。

これを実行するのmysqliはとても簡単です:

$stmt = $db->prepare('SELECT * FROM something WHERE id=?');
$stmt->bind_param($id);
$stmt->execute();

mysql_queryそれはおそらく関数のファミリーに最も近いものです。

于 2012-08-19T02:51:09.983 に答える
0

ご提案いただきありがとうございます。

私が探していた解決策は、私が始めた場所、WHERE id = $id であることがわかりました。何らかの理由で、Dreamweaver のデータベース テストではすべての結果が正しく返されましたが、where 句でフィルタリングされた結果は返されませんでした。リモートサーバーにアップロードしたところ、完全に機能しました。

再度、感謝します!

于 2012-08-19T03:39:27.097 に答える
0
$query = "SELECT * FROM `table_name` WHERE `id` = " . mysql_real_escape_string($id) . " ;"

一番正しいでしょう。table_name と id が正しいことを確認してください。

` 左の目盛りを使用すると、保護された mysql ワードを実行しないようになります。

また、Facebook ID については、BIGINT mysql タイプが必要であることに注意してください。int には数値が大きすぎます。それは過去に私を台無しにしました。

幸運を!

于 2012-08-19T02:29:47.570 に答える
-2
SELECT * WHERE 'ID' = $id;

また、 your$idが実際の文字列変数であり、ECHOインデックス 0 を返す文字列配列のようなものではないことを確認してください。

于 2012-08-19T02:15:01.137 に答える