0

谁能帮我

这很好用::

            $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 服务器版本相对应的手册,以了解在“?”附近使用的正确语法 在 /opt/lampp/htdocs/PDO/test.php:132 中的第 1 行堆栈跟踪:

0 /opt/lampp/htdocs/PDO/test.php(132): PDO->prepare('SHOW TABLES FRO...')

我尝试在查询和绑定变量中使用引号,但它不起作用

我想绑定表名,

4

1 回答 1

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)

这些方法中的任何一种都应该适合您。

于 2015-05-18T10:46:53.647 回答