簡體   English   中英

PHP | 插入數組時的SQL語法錯誤

[英]PHP | SQL syntax error when inserting array

我在將數組插入sql數據庫時遇到一些麻煩。

我的錯誤如下:

Unable to add : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '06:45:23,i want to leave a comment)' at line 1 

我的查詢var_dump是:

string(136) "INSERT INTO news_comments (news_id,comment_by,comment_date,comment) VALUES (17263,Philip,2010-05-11 06:45:23,i want to leave a comment)"

我的問題是我如何向id添加一個空值,因為它是主鍵而不是news_id

我的插入函數如下所示:

function insertQuery($tbl, &$data)
    {
        global $mysqli;
        $_SESSION['errors'] = array();
        require_once  '../config/mysqli.php';
        $query = "INSERT INTO $tbl (".implode(',',array_keys($data)).") VALUES (".implode(',',array_values($data)).")";
        var_dump($query);
        if($result = mysqli_query($mysqli, $query))
        {
        //$id = mysqli_insert_id($mysqli);
        print 'Very well done sir!';
        }
        else
        {
            array_push($_SESSION['errors'], 'Unable to add : ' . mysqli_error($mysqli));
        }
    }

注意:數組不是我的強項,所以我可能使用不正確!

您需要用單引號'yyyy-mm-dd hh:mm:ss'包裹數據(您需要將它們應用於所有文本字段(日期,varchar,char,文本等)。此外,請確保正確轉義可能是文本一部分的任何單引號。

值(如果不是數字的話)必須放在引號之間。 遍歷數組並將值放在引號中,然后可以像在代碼片段中一樣將其內爆。

您需要一個"圍繞字符串, 我想發表評論”

嘗試這個

$query = "INSERT INTO $tbl (".implode(',',array_keys($data)).") VALUES (\"".implode('","',array_values($data))."\")";

您在這里正確使用了數組,即使是奇怪的情況。 您的主要問題是您的操作方式,正在中斷查詢:

INSERT INTO news_comments (news_id,comment_by,comment_date,comment) VALUES (17263,Philip,2010-05-11 06:45:23,i want to leave a comment)

字符串值應加引號,如下所示:

INSERT INTO news_comments (news_id,comment_by,comment_date,comment) VALUES (17263,'Philip','2010-05-11 06:45:23','i want to leave a comment')

從技術上講,如果您也將引號括在數字上,那不會有什么不同,因為MySQL應該根據需要將其轉換為數字。 因此,您的代碼應更像這樣:

$query = "INSERT INTO $tbl (".implode(',',array_keys($data)).") VALUES ('".implode("','",array_values($data))."')";

請注意第二個array_implode多余'引號。 這會將每個值都用單引號引起來,從而允許在數據庫中使用它。

但是請注意,如果任何值包含' ,則它將中斷。 您需要轉義這些字符,通常使用雙引號將其轉換為'' 如果使用mysql_escape_string ,它將為您處理所有這些,但是必須對每個單獨的值進行。

我認為您在字符串值周圍缺少引號( ' ),例如,值應類似於:

17263,'Philip','2010-05-11 06:45:23','i want to leave a comment'

注意:不要忘記使用mysql_real_escape_string函數來獲取字符串值。

暫無
暫無

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

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