0


0

PHPエラーからのMySQLクエリの実行

私のコードのこの部分は、これにより複数のクエリを作成します。

$sql = "";

$sql .= "INSERT INTO projects
        (project_id, project_name, project_description, project_deadline, project_status, project_priority)
        VALUES ('" . $project_id . "', '" . $name . "', '" . $description . "', '" . $final_deadline . "', '" . $status . "', '" . $priority . "');";

foreach($assignments as $assigned_user)
{
    $sql .= "INSERT INTO assignments
             (user_id, project_id, assigned_date)
             VALUES ('" . $assigned_user . "', '" . $project_id . "', '" . time() . "');";
}

$result = mysql_query($sql) or die(mysql_error());

しかし、私はエラーが出ます:

_ SQL構文にエラーがあります。行3で 'INSERT INTO割り当て(user_id、project_id、assigned_date)'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。 _

ただし、「$ sql」をエコーすると、次のようになります。

INSERT INTO projects (project_id, project_name, project_description, project_deadline, project_status, project_priority) VALUES ('7090', 'Sup :D', 'OMG!', '716770800', '1', '1');
INSERT INTO assignments (user_id, project_id, assigned_date) VALUES ('12', '7090', '1284139311');
INSERT INTO assignments (user_id, project_id, assigned_date) VALUES ('11', '7090', '1284139311');

次に、手動でSQLをPhpMyAdminに実行しますが、正常に動作しますが、PHPがそれを実行してエラーを出力するときに動作しないのはなぜですか?

4 Answer


1


http://php.net/manual/en/function.mysql-query.php [mysql_query]は一度に1つのクエリのみを実行できます

これを試して:

$sql = "INSERT INTO projects
        (project_id, project_name, project_description, project_deadline, project_status, project_priority)
        VALUES ('" . $project_id . "', '" . $name . "', '" . $description . "', '" . $final_deadline . "', '" . $status . "', '" . $priority . "');";
$result = mysql_query($sql) or die(mysql_error());

foreach($assignments as $assigned_user)
{
    $sql = "INSERT INTO assignments
             (user_id, project_id, assigned_date)
             VALUES ('" . $assigned_user . "', '" . $project_id . "', '" . time() . "');";
    $result = mysql_query($sql) or die(mysql_error());
}


1


mysql_query関数では、複数のクエリはサポートされていません。 mysqli

multi_queryを確認してください


1


SQL仲間を学ぶ、それはルール;)

$sql = "INSERT INTO assignments
             (user_id, project_id, assigned_date) ";

foreach($assignments as $assigned_user)
{
  $sql.= " VALUES ('" . $assigned_user . "', '" . $project_id . "', '" . time() . "') ";
}

すべての変数がエスケープされていることを願っています。


0


私の推測では、mysql_query関数は複数のステートメントの実行を許可せず、各ステートメントを個別に実行する必要があります。

全体像を見て、次の投稿を検討してください:https://stackoverflow.com/questions/3228714/overwriting-data-in-a-mysql-table/3228839#3228839[MySQLテーブルのデータを上書きする]。 要約すると、実行中に文字列を連結してクエリを構築することは災害のレシピであり、SQLインジェクション攻撃やその他のバグに対して脆弱です。 mysql固有の関数を呼び出す代わりにPDO抽象化レイヤーを使用することを検討し、実行中に文字列を構築する代わりにパラメーター化されたクエリを使用することを検討してください。

これは初心者が犯す標準的な間違いです(オンラインやガイダンスが不十分な本では助けられません)。生産システム。