PDO :: связать переменную с LIKE

Может кто-нибудь мне помочь

Это прекрасно работает ::

            $stmt = $this->conn->prepare("SHOW TABLES FROM db LIKE 'xyz'"); //tablename hardcoded
$stmt->execute();
$rows = $stmt->fetch(PDO::FETCH_ASSOC);  //fetchAll

Однако, если я попытаюсь связать имя моей таблицы, оно будет динамическим в моем скрипте:

            $stmt = $this->conn->prepare("SHOW TABLES FROM db LIKE :tbl"); //tablename hardcoded
$tbl = "xyz";
$stmt->bindParam(":tbl", $tbl, PDO::PARAM_STR);

Это дает ошибку,

            $stmt = $this->conn->prepare("SHOW TABLES FROM cens LIKE ?");
$tbl = "xyz";
$stmt->bindParam(1, $tbl, PDO::PARAM_STR);

Это также дает ошибку,

Ошибка

Неустранимая ошибка: необработанное исключение «PDOException» с сообщением «SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с ‘?’ в строке 1 ‘в /opt/lampp/htdocs/PDO/test.php:132
Трассировки стека:

Я пытался с кавычками, как в запросе, так и в переменной связывания, но это не сработало

Я хочу связать имя таблицы,

0

Решение

Попробуйте следующее:

$string = 'xyz';
$somethingelse ="%".$string."%";
$sth =$dbh->prepare("select * from tablename WHERE something LIKE :somethingelse")
$sth->bindParam(":somethingelse",$somethingelse)

Другой альтернативой было бы сделать:

$string = 'xyz';
$somethingelse ="%".$string."%";
$sth =$dbh->prepare("select * from tablename WHERE something LIKE CONCAT(:string, '%')")
$sth->bindParam(":string",$string)

Любой из этих методов должен работать для вас.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]