0

次のコードを実行しようとしています。

mysql_query("INSERT INTO friend_data (UID, Name) VALUES ($friendUID, $friendName)");

ここで、$ friendUIDはFacebookから取得したユーザーIDであり、$friendNameはFacebookから取得した友人の名前です。何らかの理由で、$friendNameはMySQLに書き込みません。$ friendUIDは正常に書き込み、通常のテキストも正常に書き込みます。誰かがなぜ、またはこれを機能させる方法を知っていますか?関連するコードは以下のとおりです。

$uid = $facebook->getUser();
$friends = $facebook->api('/me/friends');
$friendUID = $value["id"];
$friendName = $value["name"];
echo $friendName;
mysql_query("INSERT INTO friend_data (UID, Name) VALUES ($friendUID, $friendName)");

ありがとうございました!

4

1 に答える 1

2

まず、PHP MySQL 拡張機能はかなり古い (そして現在 PHP5.5 で非推奨になっている)
http://www.php.net/manual/en/mysqlinfo.api.choosing.phpであるため、MySQLi または PDO の使用を検討する必要があります。

問題は、生のテキストを SQL クエリに挿入しようとしていることです。これは、インジェクションのリスクに加えて、無効なステートメントを引き起こします。

望ましい結果:

INSERT INTO friend_data (UID, Name) VALUES (1234, "Friend Name");

実結果:

INSERT INTO friend_data (UID, Name) VALUES (1234, Friend Name);

名前の値を引用符で囲み、値を挿入する前にエスケープする必要があります。

$uid = $facebook->getUser();
$friends = $facebook->api('/me/friends');
$friendUID = mysql_real_escape_string($value["id"]);
$friendName = mysql_real_escape_string($value["name"]);
mysql_query("INSERT INTO friend_data (UID, Name) VALUES ($friendUID, \"$friendName\")");
于 2013-02-13T22:51:39.257 に答える