MySQL eklerken PHP tek tırnak Kaçmak

7 Cevap php

Ben anlamak gibi olamaz şaşırtıcı bir sorunu var ... Ben burada birisi bana doğru yönde işaret etmek mümkün olabilir umuyorum ...

I have two SQL statements: - the first enters information from a form into the database. - the second takes data from the database entered above, sends an email and then logs the details of the transaction

Sorun, bir tek alıntı sadece ikinci girişindeki bir MySQL hatası tetikliyor görünür olmasıdır! Ilk örneği sorunu olmadan çalışır ancak ikinci örnek mysql_error () tetikler.

Bir form elde edilen veriler farklı bir biçimde ele verilerden ele almak mı?

Sorgu # 1 - Bu sorunu olmadan çalışır (ve tek teklif kaçmadan)

$result = mysql_query("INSERT INTO job_log 
(order_id, supplier_id, category_id, service_id, qty_ordered, customer_id, user_id, salesperson_ref, booking_ref, booking_name, address, suburb, postcode, state_id, region_id, email, phone, phone2, mobile, delivery_date, stock_taken, special_instructions, cost_price, cost_price_gst, sell_price, sell_price_gst, ext_sell_price, retail_customer, created, modified, log_status_id) 
VALUES 
('$order_id', '$supplier_id', '$category_id', '{$value['id']}', '{$value['qty']}', '$customer_id', '$user_id', '$salesperson_ref', '$booking_ref', '$booking_name', '$address', '$suburb', '$postcode', '$state_id', '$region_id', '$email', '$phone', '$phone2', '$mobile', STR_TO_DATE('$delivery_date', '%d/%m/%Y'), '$stock_taken', '$special_instructions', '$cost_price', '$cost_price_gst', '$sell_price', '$sell_price_gst', '$ext_sell_price', '$retail_customer', '".date('Y-m-d H:i:s', time())."', '".date('Y-m-d H:i:s', time())."', '1')");

Sorgu # 2 - Bir tek tırnak (yani O'Brien) ile bir isim girerken bu başarısız

$query = mysql_query("INSERT INTO message_log 
(order_id, timestamp, message_type, email_from, supplier_id, primary_contact, secondary_contact, subject, message_content, status) 
VALUES 
('$order_id', '".date('Y-m-d H:i:s', time())."', '$email', '$from', '$row->supplier_id', '$row->primary_email' ,'$row->secondary_email', '$subject', '$message_content', '1')");

7 Cevap

Sen mysql_real_escape_string() (her iki snippet'te) Bu dizelerin her kaçan edilmelidir.

http://us3.php.net/mysql-real-escape-string

Eğer magic_quotes_gpc (kötü bir fikir olduğunu bilmeniz gereken) açık var çünkü iki sorgularda farklı davranıyor nedeni muhtemeldir. Bu dizeleri $ _GET, $ _POST ve $ _COOKIES sizin için kaçtı toplanan anlamına gelir (yani, "O'Brien" -> "O\'Brien").

Eğer verileri saklamak ve daha sonra tekrar almak sonra, geri veritabanından almak dize not sizin için otomatik olarak kaçtı olacaktır. Geri almak "O'Brien". Olacak Yani, bunu mysql_real_escape_string() geçmesi gerekir.

Eğer hata ayıklama yardımcı olmak için böyle bir şey yapmalıyım

$sql = "insert into blah blah....";
echo $sql;

Muhtemelen tek tırnak çalışan sorguda ile öncelenmedikçe olduğunu göreceksiniz. Bu magic_quotes_gpc ayarı ile php tarafından otomatik olarak yapılmış olabilir, ya da belki (addslashes ve stripslashes aramak için işlevler olabilir) kodu bazı diğer kısmı kendiniz yaptım.

See http://php.net/manual/en/security.magicquotes.php

Sen dizeleri savaşan bir kaç şey var.

  • Doğru MySQL eksikliği alıntı (mysql_real_escape_string())
  • Potansiyel otomatik 'sihirli tırnak' - ayarını gpc_magic_quotes kontrol
  • Eğer PHP doğru değişkenleri bulur bilmek zorunda kalıyoruz gömülü dize değişkenleri,

Bu tek tırnaklı değeri ilk sorguya parametreleri mevcut olmadığı da mümkündür. Sizin örnek tüm sonra, doğru bir isim olduğunu ve sadece ikinci sorgu adları ile ilgili gibi görünüyor.

Try This

mysql_real_escape_string Benzer addslashes

$str = "Is your name O'reilly?";
// Outputs: Is your name O\'reilly?
echo addslashes($str);

kullanılarak addslashes

 $str = "Is your name O'reilly?";
    // Outputs: Is your name O\'reilly?
  echo mysql_real_escape_string($str);

kullanılarak mysql_real_escape_string

Sadece "() ($ val Döşeme) mysql_real_escape_string" içeride varialbe VEYA verileri geçmelidir

burada $ val = veri wwhich sizi rahatsız edilir.

mysql_real_escape_string () veya str_replace () fonksiyonu sorunu çözmek için yardımcı olacaktır.

http://phptutorial.co.in/php-echo-print/

Ben aynı sorunu vardı ve ben bu gibi çözdü:

$text=str_replace("'","\'",$YourContent);

Orada bunu yapmak için daha iyi bir yolu muhtemelen, ama benim için çalıştı ve sizin için de çalışması gerekir.