PHP kullanarak SQL deyimi ile sorun

2 Cevap php

Şu anda PHP kullanarak MySQL veri çekmeye çalışıyorum ve şu hatayı almaya devam:

"Could not retrieve records: 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 '%PC4198% OR oem LIKE %Fluke%' at line 1 "

Aşağıdaki gibi benim SQL deyimi:

$sql = "SELECT * FROM account WHERE `NSC ID` LIKE %".$nscid."% OR oem LIKE %".$oem."%";

Herhangi bir yardım büyük beğeni topluyor.

2 Cevap

Sizin dizeleri alıntı alınmalıdır:

$sql = "SELECT * FROM account WHERE NSC ID LIKE '%".$nscid."%' OR oem LIKE '%".$oem."%'";

O dedi, gerçekten PDO veya bir ORM kullanmayı düşünmelisiniz.

Edit:

Bill (SQL içine muhtemelen kirli dizeleri bitiştirmek kaynaklanan) SQL enjeksiyonu önlemek için, dediğim gibi PDO kullanarak ana noktasıdır.

Aynı sorgu PDO tarzda olurdu:

$query = $connection->prepare('SELECT * FROM account WHERE NSCID LIKE :nscid OR oem LIKE :orm');
$query->bindValue(':nscid', '%'.$nscid.'%', PDO::PARAM_STR);
$query->bindValue(':oem', '%'.$oem.'%', PDO::PARAM_STR);

Bu biraz daha kod, ama kütüphane kaçışa yapmak sağlayarak, (tüm?) En SQL enjeksiyonu seni korurum.

(BindValue için parametre türleri isteğe bağlıdır, ama iyi bir uygulama.)

Hatta daha iyisi, operatörler {ve} bunu yapmak için izin verebilirsiniz

$sql="SELECT * FROM account WHERE NSC ID Like '%{$nscid}%' OR oem LIKE '%{$oem}%'";

Böyle onun bir tek var ama eğer bir nesneyi kullanmak eğer onlara ihtiyacım var {} gerek yoktur:

$hi_example="yarg i am a {$person->type}";