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 /opt/lampp/htdocs/PDO/test.php(132): PDO-> prepare ("ПОКАЗАТЬ ТАБЛИЦЫ FRO...")

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

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

1 ответ

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

$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)

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

Другие вопросы по тегам