PDO ::使用LIKE绑定变量

时间:2015-05-18 10:42:10

标签: php pdo bindparam

任何人都可以帮助我

这样可以正常工作::

            $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' with message' SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以便在#"'附近使用正确的语法。在第1行'在/opt/lampp/htdocs/PDO/test.php:132 堆栈跟踪:

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

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

我想绑定表名

1 个答案:

答案 0 :(得分: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)

这些方法中的任何一个都适合你。