2011-03-08 11 views
0
$qry1 = "DELETE FROM 
    si_topics 
WHERE 
    topic_id = '". $_GET['topic'] ."' 
DELETE FROM 
    si_posts 
WHERE 
    topic_id = '". $_GET['topic'] ."'"; 

$mysqlqry1 = mysql_query($qry1); 
if($mysqlqry1){ 
    echo 'Topic deleted from database!'; 
} else { 
    echo 'Mysql query failed!'; 
} 

メッセージMysql query failed!は、なぜですか?1つの変数で2つのMySQLクエリを助けますか?

グリーティング

+2

このようなコードはSQLインジェクションのための資金が必要であることにご注意ください。 –

答えて

2

2つの削除ステートメントの間にセミコロンがありません。

また、mysql_queryでは複数のクエリがサポートされていません。 the documentationから

するmysql_query()は、指定されたlink_identifier.`

1
に関連付けられたサーバ上の現在アクティブなデータベースに独自のクエリ (複数のクエリがサポートされていない)を送ります

mysql_query()の機能を複数回実行することはできません。

複数のクエリを実行する代わりにmysqli::multi_queryを試してみてください。クエリを区切ることができます;

-1

'echo'の後にmysql_error($ link)を追加するmysqlクエリに失敗しました ';'行

それは問題を説明します。

+1

これは答えではなく、代わりにコメントにする必要があります。 –

0

PHPでは、2回のクエリを1回で実行することはできません。

2つの変数でクエリを分割し、1つずつ実行する必要があります。

http://php.net/manual/en/function.mysql-query.php

ドキュメントは説明する:

するmysql_query()指定された に関連付けられたサーバー 上で現在アクティブなデータベースに独自のクエリ (複数のクエリがサポートされていない) を送りますlink_identifier。

標準のMySQLセミコロン(;)はここでは機能しません。マニュアルから引用

1

(私の強調)

するmysql_query()は、独自のクエリを(複数のクエリがをサポートしていません)

あなたは、いくつかのSQL文を実行したい場合は送信します単一クエリの場合はmysqliとを使用する必要があり、各ステートメントはセミコロン(;)で区切る必要があります

1

理由:

  • あなたは(どのように他のMySQLサーバーは2番目のクエリが始まる場所を知ることになっている?!?)あなたは、クエリの間にセミコロンを追加したい場合でも、無効な構文で1つのクエリを送信し、
  • しています、 PHPの古いライブラリdoesn't supportはここにあります。

代わりにmysqli.multi_query()を使用してください。

あなたのコードにはSQLインジェクションの脆弱性がありますので、準備文を入力するか、少なくとも入力をサニタイズする必要があります。はまだのようにPHPを書いていますか?

+0

+1「彼らはこれらの学校で何を教えているのですか?」... ...私は数年前にその質問を諦めました –

0

複数のテーブルに複数の削除条件を指定する場合は、DELETE文にJOIN構文を使用できますが、これは非効率的ですが、そのようにクエリがmysql_queryに収まるようになります();

誰かがすでにそのため、親指をmysqliのとmulti_queryの機能を述べた:)

を一方、あなたのコードは、SQLインジェクション攻撃に対して非常に傾向がある、常にそれを使用する前に、あなたの$ _POSTや$ _GET入力をきれいに直接クエリ!

関連する問題