0

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)"

私の質問は、news_id ではなく主キーであるため、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));
        }
    }

注: 配列は私の長所ではないので、間違って使用している可能性があります!

4

5 に答える 5

4

データを一重引用符で囲む'yyyy-mm-dd hh:mm:ss'必要があります (すべてのテキスト フィールド (date、varchar、char、text など) に適用する必要があります)。また、テキストの一部である可能性のある一重引用符を適切にエスケープしてください。

于 2010-05-11T18:24:08.237 に答える
2

値 (数値でない場合) は引用符で囲む必要があります。配列を調べて値を引用符で囲むと、コード スニペットで行ったように内破できます。

于 2010-05-11T18:23:31.063 に答える
1

コメントを残したい"文字列の周りが必要です

これを試して

$query = "INSERT INTO $tbl (".implode(',',array_keys($data)).") VALUES (\"".implode('","',array_values($data))."\")";
于 2010-05-11T18:24:25.460 に答える
1

奇妙な方法であっても、ここでは配列を正しく使用しています。あなたの主な問題は、あなたがそれをどのように行っているか、クエリを壊していることです:

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))."')";

2 番目の余分な'引用符に注意してくださいarray_implode。これにより、すべての値が一重引用符で囲まれ、データベースで使用できるようになります。

ただし、いずれかの値に が含まれている'と、破損することに注意してください。通常は double を使用してこれらをエスケープし、 に変換する必要があります''mysql_escape_stringを使用すると、これがすべて処理されますが、個々の値ごとに実行する必要があります。

于 2010-05-11T18:27:59.523 に答える
0

文字列値を囲む引用符 ( ) が欠落していると思います。'たとえば、値は次のようになります。

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

注:mysql_real_escape_string文字列値には関数を使用することを忘れないでください。

于 2010-05-11T18:24:55.173 に答える