PHP PDO deyimi hazırlanan -

2 Cevap php

Bu taşması yığını benim ilk yazı olduğunu, ama bilginin mevcut vücut çok yararlı buluyorum. Her neyse, burada mesele:

Ben PHP'nin PDO sınıfının (mysql sürücü) ile bir arama yapmak için çalışıyorum. Ben mysql istemci (masum korumak için değiştirildi tablo adları) ile çalışan aşağıdaki sorgu var:

SELECT    hs.hs_pk, 
          hs.hs_text, 
          hs.hs_did, 
          hd.hd_did, 
          hd.hd_text, 
          hv.hv_text, 
          hc.hc_text 
FROM      hs 
LEFT JOIN hd 
 ON       hs.hs_did = hd.hd_did 
LEFT JOIN hd 
 ON       hd.hd_vid = hv.hv_id 
LEFT JOIN hc 
 ON       hd.hd_pclass = hc.hc_id
WHERE     hs.hs_text LIKE "%searchTerm%"
LIMIT 25;

Bu ne olursa olsun ben kullanmak arama terimi bir cazibe gibi çalışır. Ben php taşımak Ancak, ben hiçbir şey geri alınamıyor. Ben çalışmak için mantıklı görünüyor birkaç farklı sözdizimi denedim, ama hiçbir şey eserlerini denedim. Burada benim mevcut kod:

$handle = fopen('/foo/bar/test.log', 'w+');
fwrite($handle, "doSearch, with search term: $searchTerm\n");
$sql = 
'SELECT   hs.hs_pk, 
          hs.hs_text, 
          hs.hs_did, 
          hd.hd_did, 
          hd.hd_text, 
          hv.hv_text, 
          hc.hc_text 
FROM      hs 
LEFT JOIN hd 
 ON       hs.hs_did = hd.hd_did 
LEFT JOIN hd 
 ON       hd.hd_vid = hv.hv_id 
LEFT JOIN hc 
 ON       hd.hd_pclass = hc.hc_id
WHERE     hs.hs_text LIKE :searchTerm
LIMIT 25';

try {
 $dbh = new PDO('mysql:host=localhost;dbname=awdb', "user", "password");
 fwrite($handle, "connected to DB\n");
 $prep = $dbh->prepare($sql);
 $ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));

 while ($row = $prep->fetch(PDO::FETCH_ASSOC)) {
  $i++;
  $result[$i]['subText'] = $row['hs_pk'];
  $result[$i]['subText'] = $row['hs_text'];
  $result[$i]['subDid'] = $row['hs_did'];
  $result[$i]['devDid'] = $row['hd_did'];
  $result[$i]['devText'] = $row['hd_text'];
  $result[$i]['vendorText'] = $row['hv_text'];
  $result[$i]['classText'] = $row['hc_text'];
 }
    $dbh = null;
}   
catch (PDOException $e) {
  print "Error!: " . $e->getMessage() . "<br/>";
  die();
}

Ben (SQL WHERE yan tümcesi ve hazırlık-> tüm bu değişim çizgileri olan yürütme) de aşağıdaki denedim:

WHERE hs.hs_text LIKE CONCAT(\'%\', ?, \'%\') 
$ret = $prep->execute(array($searchTerm));

WHERE hs.hs_text LIKE "%:searchTerm%" 
$ret = $prep->execute(array(':searchTerm' => $searchTerm));

WHERE hs.hs_text LIKE ":searchTerm" 
$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));

vs ..

Ben kodu too özensiz değil umut, şimdiden teşekkürler

-Tim

2 Cevap

$ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));

Bu yanlış. Sen çift tırnak gerekmez.

WHERE hs.hs_text LIKE ":searchTerm" 
$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));

This is also wrong. Try with:

$prep = $dbh->prepare($sql);
$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));

Açıklama: Hazırlanan tablolar sadece bir dize yerine yapmıyoruz. Onlar sorgudan tamamen ayrı veriyi taşımak. Bir sorgu içine değerleri gömerken tırnak sadece ihtiyaç vardır.

Peki, bu bir çözüldü. Ve açıkçası, ben bir aptalım ... Bu görme ve iyi geri bildirimler için teşekkür ederiz. Sorunu (I değişti, hangi nedenle burada kimse ... ile başlamak benim sorunu görmek mümkün olurdu) bir tablo adı bir yazım hatası oldu. Önerileri olsa da, sorunu bulmak için bana yol, yani Adam jkndrkn ve troelskn teşekkür etmedi.

Kayıt için, aşağıdaki kombinasyon iyi çalışıyor:

WHERE aw_hcl_subdevices.hs_text LIKE CONCAT(\'%\', ?, \'%\')
$ret = $prep->execute(array($searchTerm));