簡體   English   中英

從PHP錯誤執行MySQL查詢

[英]Executing MySQL Query from PHP error

我的代碼的這一部分由此創建了一個多重查詢:

$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執行並輸出錯誤時,它為什么不起作用?

mysql_query一次只能執行一個查詢

嘗試這個:

$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());
}

mysql_query函數不支持多個查詢。 檢查mysqli :: multi_query

http://php.net/manual/zh/mysqli.multi-query.php

學習SQL兄弟,它規則;)

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

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

希望您所有變量都已轉義。

我的猜測是mysql_query函數將不允許執行多個語句,每個語句將需要單獨執行。

不過,從更大的角度看,請考慮以下發布: 覆蓋MySQL表中的數據 總之,在執行操作時通過串聯字符串來建立查詢是災難的根源,您將很容易受到SQL注入攻擊和其他錯誤的攻擊。 考慮使用PDO抽象層而不是調用mysql特定的函數,並考慮使用參數化查詢而不是在構建字符串時進行操作。

這是初學者所犯的標准錯誤(在線上以及在書籍中提供的指導不力的大量示例都無濟於事),因此,如果您是初學者,不要為此感到難過,請記住,不要在這種情況下使用此方法生產系統。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM