1

Javascript 関数には、クエリからデータベース データを取得するために PHP スクリプト (つまり、getDBData.php) を呼び出す次の JQuery があります。

$("#dbcontent").load("getDBData.php", {query: "SELECT * FROM `texts` WHERE name='John' LIMIT 10;"});

getDBData では、POST 経由で次のクエリをフェッチします。

$query = $_POST['query'];

そしてそれを mysql_query の入力として与えます:

$query = mysql_query($query) or die(mysql_error());

ただし、次の MySQL エラーが発生します。

SQL 構文にエラーがあります。1 行目の '\'John\' LIMIT 10' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

ここで何が問題なのですか?クエリを渡すときの文字エンコーディングと関係があると思いますが、正しくないようです。

4

3 に答える 3

5

いかなる状況でもこれを行うべきではありません。適切なクエリを作成するために使用できるパラメーターを渡す必要があります。

せめてこんなことを……。

Javascript

$.post('getDBData.php', {
   query: 'getTextsByUser',
   user: 'John'
});

PHP

$queries = array(
   'getTextsByUser' => 'SELECT * FROM texts WHERE name = ?',
   'getNewsById' => 'SELECT * FROM news WHERE id = ?'
);
$stmt = $dbConnection->prepare($queries[$_POST['query']);
$stmt->bind_param('s', $_POST['user']);

$stmt->execute();

$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    // do something with $row
}

次にgetUsers、ajax を介して渡して、実行するクエリを決定します。

注:このプロジェクトを始めたばかりの場合、mysql_query()は廃止されているため、 mysqliへの切り替えを検討する必要があります。

于 2013-02-14T17:30:14.683 に答える
1

他の人が指摘しているように、このようにしないでください!Webnet のソリューションははるかに優れています。

しかし、私はあなたの最初の問題を解決する方法を知っていると信じています. JSONを解析するときに私も一度それを持っていて、それを使用して解決しましたstripslashes()

$query = stripslashes($_POST['query']);
mysql_query($query);
于 2013-02-14T17:42:49.263 に答える
0

多くの人が述べているように、これは非常に危険です。ただし、URLエンコーディングでクエリを指定する必要があるという事実が失敗していると思います。http://en.wikipedia.org/wiki/Query_string#URL_encodingを参照してください。これは特に=シンボルに当てはまります。

于 2013-02-14T17:28:50.113 に答える