Gibi yan tümcesi ile hazırlanmış bir PDO deyimi yürütme

0 Cevap php

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?

0 Cevap