PHP kaçan soru

7 Cevap php

Ben sadece aşağıdaki kodu okudum ama orada "ve ayrıca 'kullanılan neden anlamıyorum. Teşekkür ederiz!

$sql='SELECT uid,name FROM users WHERE user="'.mysql_real_escape_string($_POST['login_name']).'" AND ..

7 Cevap

Bu SQL sorgusu yazmak (ve bir dize saklamak) için bir PHP programıdır.

Hedef SQL bu gibi görünüyor:

SELECT uid,name FROM users WHERE user="something" AND …

PHP açısından çok:

$foo = 'SELECT uid,name FROM users WHERE user="something" AND …'

Ama dinamik veri ile "bir şey" değiştirmek istiyor. Bu durumda yayınlanmıştır Login_name - ama MySQL için güvenli yaptı.

$foo = 'SELECT uid,name FROM users WHERE user="' .
       mysql_real_escape_string($_POST['login_name']) .
       '" AND …'

Daha iyi bir yaklaşım kullanmak için prepared statements.

Olmamalıdır.

"Doğru" $sql bu gibi görünebilir:

$sql="SELECT uid,name FROM users WHERE user='".mysql_real_escape_string($_POST['login_name'])."';

Bunu değişmez bir dize / söylemek için SQL kullanabilirsiniz.

Ben içine bakmak öneririm prepared statements, i mysql_real_escape_string güvenmiyorum ne mysql_very_real_seriously_this_is_the_real_escape_string, php-sendromu güven değildir.

(Ben tırnak etrafında başka bir yol kullanmak istiyorum gerçi), tek tırnak SQL deyimi ("SELECT ...") çevreleyen, çift tırnak alan "kullanıcı" için veri çevreliyor.

Sorgu böyle bir şey (tek tırnak kullanın) görünecektir:

SELECT uid FROM users WHERE user='snake'

Değişken $ sql için bu sorguyu atamak için, bu defa çift tırnak kullanarak, tırnak içine olurdu, bu yüzden PHP kabul etmez, dize 'yılan' önce sona erecekti:

$sql = "SELECT uid FROM users WHERE user='snake'";

Eğer daima durağan 'yılan' soran olmayacak gibi Ve, tekrar çift tırnak kullanarak $ sql-string girerek / çıkan, dinamik bir adla 'yılan' alışverişi:

$sql = "SELECT uid FROM users WHERE user='" . $dynamic . "'";

Sadece tırnak tek tip istedim, kullanıcı dize içine tırnak kaçmak olurdu.

"tam anlamıyla bu yüzden istek mysql veritabanına göndermek son mysql talebi dahil edilecektir olacak:

SELECT uid,name FROM users WHERE user="loginname" AND ..

Tek tırnak PHP sizin dizeyi tanımlamak için kullanılır. Çift olanları SQL sorgusunda metin alanını (Login_name) sınırlandırmak.

Bu aynı kullanılmış olsaydı, sorgunun tırnak kaçan önlemek için yapılır.

Siz php dizeleri sarılması için tek veya çift tırnak kullanabilirsiniz. Ancak farklar vardır.

Tek tırnak dizeleri ile, değişkenleri (örneğin: $a = 'hi $name') değil.END_DIV, ne de çıkış karakterleri (örneğin: $a = 'hi!\n$name').

İşte güzel bir özetidir: http://www.jonlee.ca/php-tidbit-single-quotes-vs-double-quotes/

Ayrıca çift tırnak SQL dizeleri encasing için kullanılması gerektiğini eğer .. emin değil bir yan not. Seni en çok veritabanları tek tırnak kullanmak gerekir inanıyorum.

Tek tırnak sorgu ve çift tırnak sorgu kendisi için kullanmak ne şekilde PHP kodu için kullanılır gibi görünüyor

More on Single/Double quotes

Her zaman Tek / Çift tırnak DB karşı SQL çalıştırmadan önce nasıl görüneceğini görmek için $ sql değerini yankı.

gibi bir şey:

$sql='SELECT uid,name FROM users WHERE
user="'.mysql_real_escape_string($_POST['login_name']).'";

// Print the SQL
echo $sql."<br />";