Может кто-нибудь мне помочь
Это прекрасно работает ::
$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
Трассировки стека:
Я пытался с кавычками, как в запросе, так и в переменной связывания, но это не сработало
Я хочу связать имя таблицы,
Попробуйте следующее:
$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)
Любой из этих методов должен работать для вас.
Других решений пока нет …