MYSQL HATASI

4 Cevap php

Ayı ile beni ben tüm bu biraz yeni duyuyorum,

Benim PHP komut dosyası çalıştıran bu sorgu var:

$insertQuery = "INSERT INTO blog_articles 
     VALUES '$title', $tags', '$category', '$blog', '$author', '$date'";

Daha sonra bu komut dosyasını çalıştırın:

    if ($result = $connector->query($insertQuery)){
	// It worked, give confirmation
	echo '<center><b>Article added to the database</b></center><br>';
}else{
	// It hasn't worked so stop. Better error handling code would be good here!
	die (mysql_error());
}
}

Ben bu hatayı alıyorum:

Eğer SQL sözdizimi bir hata var; yakınındaki kullanılacak doğru sözdizimi için MySQL sunucu sürümü karşılık kılavuzunu kontrol hattında 2 at 'Başlık Sayı 1, Genel, Blogging, Kayaking, Genel, TGIS blog sayı spelli olduğunu'

Birisi bana yardımcı olabilir, ama ben hatanın ne olduğunu söyleyemem, o iyi görünüyor böylece büyük teşekkür olacaktır

4 Cevap

Sizin sorgu daha böyle olmalı

INSERT INTO blog_articles (`title`, `tags`, `category`, `blog`, `author`, `date`)
VALUES ('$title', '$tags', '$category', '$blog', '$author', '$date')

Ayrıca sorgu dezenfektan içine bakmak gerekir. (Sonuçlar değişebilir yani ama, senin tam kurulum bilmiyorum) Belki de bu yolu

$sql = sprintf("INSERT INTO blog_articles (`title`, `tags`, `category`, 
    `blog`, `author`, `date`) VALUES ('%s', '%s', '%s', '%s', '%s', '%s')",
mysql_real_escape_string($title), mysql_real_escape_string($tags), 
mysql_real_escape_string($category),  mysql_real_escape_string($blog), 
mysql_real_escape_string($author),  mysql_real_escape_string($date));

Bu sprintf() işlevini kullanır, php dokümantasyon bazı büyük örnekler vardır.

Daha önce $ eksik etiketleri tek bir alıntı.

Eğer için eklediğiniz alanların adlarını eklemeniz gerekir

INSERT INTO blog_articles ('title', 'tags', 'category', 'blog', 'author', 'date') VALUES ('$title', '$tags', '$category', '$blog', '$author', '$date')

Ayrıca SQL sorgusu kırabilir metnin çift veya tek tırnak kaçmak için bazı kod eklemek gerekir.

PHP işlevi mysql_real_escape_string kullanın ()

X00 \, \ n, \ r, \, ', "ve \ x1a: mysql_real_escape_string () aşağıdaki karakterleri ters slash MySQL kütüphane fonksiyonu mysql_real_escape_string, çağırır.

For more details: http://uk.php.net/mysql_real_escape_string

Aknock söylediği gibi, bir 'önce $ etiketleri eksik.

Ancak, gerçekten SQL injection saldırılarına karşı korumak için mysql_escape_string kullanarak gerekir. SQL sorgu parametreleri için mysql_escape_string kullanarak içine almak için iyi bir alışkanlıktır.

Gibi bir DB sarıcı kullanılması PEAR daha az acı parametrelerini kaçan yapabilirsiniz. Yukarıdaki kod şöyle yazılabilir:

$insertQuery = "INSERT INTO blog_articles \
                  (`title`, `tags`, `category`, `blog`, `author`, `date`) \
                  VALUES (?, ?, ?, ?, ?, ?)";

$data = array($title, $tags, $category, $blog, $author, $date);

if ($result = $connector->query($insertQuery, $data)) {
    // It worked, give confirmation
    echo '<center><b>Article added to the database</b></center><br>';
}else{
    // It hasn't worked so stop. Better error handling code would be good here!
    die (mysql_error());
}

(Bir ARMUT DB nesne $connector varsayarak)

Açıkça takıyor sütunların adlarını ve sırasını vererek kod çok daha rahat ve okunabilir yapar. Daha sonra veritabanı şemasını değiştirirseniz, yanlış sütuna ekleme veya herhangi bir fazla var olmayan sütunlara korunmuş olacaktır.