Bu sorguda hazır deyimleri nasıl kullanılır?

5 Cevap php

PHP ve PDO yeniyim, ve ben burada hazır deyimleri kullanmaya çalışın. Etrafında çalışırken 1 saat sonra ben vazgeçtim. Ya da benim öğretici sadece korkunç kötü oldu.

EDIT:

Hazırlanan bu tablolar olmadan mükemmel bir şekilde çalışıyor:

try {
    $dbh = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
    $prepared = $dbh->prepare('SELECT * from sys_navigation_point WHERE name="root"');
    //$prepared->bindParam('foo', 'root');

    $prepared->execute();

    foreach($prepared as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

Ama bu bir hazır deyimi ile hiç çalışmıyor. Bunu yaparken tamamen boş bir sayfa alıyorum:

try {
    $dbh = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
    $prepared = $dbh->prepare('SELECT * from sys_navigation_point WHERE name=:foo');
    $prepared->bindParam('foo', 'root');

    $prepared->execute();

    foreach($prepared as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

fan kök ile değiştirilmesi gerekir. Ancak, bu değil.

5 Cevap

Tablo ve sütun isimleri gibi şeyler için params kullanamaz, sadece, tam olarak dinamik sorguları için veri için kullanılacak pinti

Bu çalışması gerekir:

$prepared = $dbh->prepare('SELECT * from sy_navigation_point WHERE Foo=:whatever');
$prepared->bindParam('whatever', 'Bar');

EDIT: Bu gerçek bir çözüm olmalıdır.

Bakarak documentation, bu model olmak zorunda olduğu açıktır:

$prepared = $dbh->prepare('SELECT * from sy_navigation_point WHERE Foo=:whatever');
$prepared->bindParam('whatever', $value);

Sonra bunu:

$value = 'Bar';
$prepared->execute();

Bağlama sırasında da, adına kolon kullanmayı deneyin:

$prepared->bindParam(':foo', 'root');

Bu dokümanlar yapıldığı gibi: http://php.net/manual/en/pdostatement.bindparam.php

Sizin bindParam 'in ikinci parametresi has bir değişken olduğu, aksi takdirde ölümcül bir hata alırsınız. Bu yüzden,

$value='root';
$prepared->bindParam('foo', $value);

veya:

$prepared->bindValue('foo', 'root');


Bu hata iletileri görüntülenir zaman anlamaya kolay:

if ($in_development) ERROR_REPORTING(E_ALL);
// ... code

http://www.php.net/manual/en/pdo.prepare.php A commenter there says that it doesn't work properly for keywords, table names, view names and field names So you'd need $prepared = $dbh->prepare('SELECT * from ' . $table);

Sadece gerçekten sütun değişkenleri için çalışır gibi.

Sen bildirimde hazırlanan bir MySQL bir tablo bağlamak değil, yalnızca değerleri bağlayabilirsiniz. Dan the manual:

However, they are not allowed for identifiers (such as table or column names), or to specify both operands of a binary operator such as the = equal sign.