PHP | SQL sözdizimi hatası ekleyerek dizi

4 Cevap php

Ben sql veritabanına bir dizi ekleme bazı sorun yaşıyorum.

aşağıdaki gibi benim hatadır:

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 

Benim sorgu var_dump olduğunu:

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

Benim soru birincil anahtar ve news_id olmadığı gibi nasıl ben id için boş bir değer katacak olan

benim insert işlevi, bu gibi görünüyor:

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

Not: i-bunları doğru kullanıyor olabilir bu yüzden diziler benim güçlü noktası değildir!

4 Cevap

Hatta garip bir şekilde bile, doğru burada dizileri kullanıyor. Sizin asıl sorun bunu nasıl yaptığınızı, sorguyu kırıyorsun olduğunu:

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)

Dize değerleri gibi, alıntı edilmelidir:

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

Teknik olarak, sayılar tırnak koyarsanız, çok, gereken şekilde MySQL sayılara dönüştürmek gerektiğini, çünkü bir fark yapmaz. Yani, kodunuzu daha bu gibi olmalıdır:

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

Ikinci ekstra ' tırnak fark array_implode. Bu veritabanında kullanılan izin veren, tek bir alıntı ile her değer kaydırılır.

Değerlerden herhangi birini ihtiva eden, bir ', o zaman kıracak Bununla birlikte, dikkat edin. Genellikle '' dönüştürerek, bir çift kullanarak, bu kaçmak gerekir. Eğer kullanırsanız mysql_escape_string, sizin için tüm bu ilgilenir, ama her değerin üzerinde yapılmalıdır.

Sen tek tırnak 'yyyy-mm-dd hh:mm:ss' (Çok tüm metin alanları (tarih, varchar, char, metin bunları uygulamak gerekir) ile verilerinizi kaydırmak gerekir. Ayrıca, emin düzgün tek bir tırnak kaçmak için yapmak olabilir Metnin bir parçası olmak.

Bir " dize civarı i want to leave a comment Yorum gerekiyor

Bu deneyin

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

Ben tırnak (') string değerler etrafında örneğin değerleri gibi olmalıdır eksik olduğunu düşünüyorum:

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

Note: dize değerleri için mysql_real_escape_string işlevini kullanmak unutmayın.