a) Скажите PDO, что вы хотите, чтобы он использовал исключения для сообщений об ошибках
$dbh = new PDO("sqlite::memory:");
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
b) вместо того, чтобы вводить параметры полезной нагрузки в оператор sql, используйте подготовленные параметризованные операторы
try {
$stmt = $dbh->prepare( 'SELECT * FROM `item` WHERE combo LIKE ? LIMIT 1' );
$stmt->execute( array($value) );
foreach( $stmt as $row ) { ...
в) Если вы все еще не получили никакого вывода, попробуйте код, который безусловно печатает что-то.Например, счетчик SELECT (*) всегда будет возвращать хотя бы одну запись (если ошибок не будет).
$stmt = $dbh->prepare( 'SELECT Count(*) as cnt FROM `item` WHERE combo LIKE ?' );
$stmt->execute( array($value) );
foreach( $stmt as $row ) {
echo 'Count: ', $row['cnt'], "\n";
}
$stmt = null;
edit: автономный пример
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
echo "start\n";
try {
$dbh = new PDO("sqlite::memory:");
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
setup($dbh);
$stmt = $dbh->prepare('SELECT * FROM item WHERE combo LIKE ? LIMIT 1');
$stmt->execute( array('comboB') );
foreach( $stmt as $row ) {
echo
$row['name'], " ",
$row['style'], " ",
$row['appr'], "\n"
;
}
}
catch(Exception $ex) {
var_dump($ex);
}
echo "done.\n";
function setup($dbh) {
$dbh->exec('
CREATE TABLE item (
combo TEXT,
name TEXT,
style TEXT,
appr TEXT
)
');
$stmt = $dbh->prepare('INSERT INTO item (combo,name,style,appr) VALUES (?,?,?,?)');
$stmt->execute( array('comboA','nameA','styleA','apprA') );
$stmt->execute( array('comboB','nameB','styleB','apprB') );
$stmt->execute( array('comboC','nameC','styleC','apprC') );
}