Ben PHP için yeni duyuyorum, ve bir test MySQL db bağlanmak için PDO kullanmayı öğrenmeye çalışıyorum. Ben şu var:
try {
$db = new PDO('mysql:dbname=MYDBNAME;host=MYHOST', 'USERNAME', 'PASSWORD');
$query = "select * from books where ? like '%?%'";
$stmt = $db->prepare($query);
$stmt->execute(array($searchtype, $searchterm));
} catch(PDOException $e) {
echo 'PDOException: ' . $e->getMessage();
}
When I try it I get the following warning: Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
Ben gibi fıkra ve $ SEARCHTERM param kaldırdığınızda, düzgün sonuç verir. Işe yaramadı, çift tırnak altında bu sorguyu oluşturmak için yasal bir yol olmayabilir, bu yüzden 'kaçan denedim -'%%? 'Gibi - diye düşündüm. Ben bir çözüm için etrafına baktı, ve birisi aşağı $ SEARCHTERM olduğu için '% ve%' taşındı bulundu:
$query = "select * from books where ? like ?";
...
$stmt->execute(array($searchtype, '\'%'.$searchterm.'%\''));
I got the same result.
Any help is appreciated. Thanks!
/ UPDATE ****/ I found on example 12 of http://us3.php.net/manual/en/pdo.prepared-statements.php
Yer tutucu Örnek # 12 geçersiz kullanımı
<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE '%?%'");
$stmt->execute(array($_GET['name']));
// Below is What they suggest is the correct way.
// placeholder must be used in the place of the whole value
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE ?");
$stmt->execute(array("%$_GET[name]%"));
?>
Bunu denedim, ve ben artık bir Uyarı almak olsa, ben herhangi bir sonuç alamadım. Ben sorgu çalıştırdığınızda Ancak doğrudan ben sonuçlarının birkaç alacak. Herhangi bir düşünce?