内部联接并在PDO准备语句中按类别名称进行选择

时间:2015-10-04 07:09:39

标签: php mysql pdo

我是PDO预备语句的新手,我了解到有很多方法可以编写我喜欢使用的预备语句:

$query = $db->prepare("SELECT * from users WHERE username = :username");
$query->execute(array(':username'=>$un));   

这是快速而简单的方式,我想让自己保持这条线。现在看看下面的代码,这是我的问题:

$query = ("SELECT blogs_id, title, body, posted_by, full_name, bio, posted, category 
FROM blogs INNER JOIN categories ON categories.category_id=blogs.category_id where 
category='cat1' OR category='cat2' OR category='cat3' ORDER BY blogs_id desc LIMIT 2");  

现在这实际上是用php mysqli编写的,现在我想将其更改为我上面用于PDO预处理语句的方式,而不是bindValuebindParam但是在这里我通过类别名称直接从数据库中调用数据,因此execute(array(':category'=>cat1));肯定不会起作用,因为我们需要一个变量来代替cat1或者这会有效吗?如果不是如何做到这一点。

2 个答案:

答案 0 :(得分:0)

只有在查询中使用变量时才必须使用占位符。

如果没有 - 您根本不需要占位符,也不必将任何内容传递给execute()。实际上,在这种情况下,您可以使用query()方法而不是准备/执行。

答案 1 :(得分:-1)

每个参数都应该唯一命名,否则你可能会收到通知,警告你这个事实,占位符的数量必须与bound parameters数组中的参数数量相匹配 - 所以你的查询可以像这样写。不幸的是,您无法在order bygroup by条款中使用$query = ("select b.`blogs_id`, b.`title`, b.`body`, b.`posted_by`, b.`full_name`, b.`bio`, b.`posted`, c.`category` from `blogs` b inner join `categories` c on c.`category_id`=b.`category_id` where `category`=:cat1 or `category`=:cat2 or `category`=:cat3 or `category`=:cat4 order by `blogs_id` desc limit 2"); $params=array( ':cat1' => $somevar, ':cat2' => 'a string', ':cat3' => $anothervar, ':cat4' => 'fashion' ); /* with the actual values you specify */ $params=array( ':cat1' => 'Entertainment', ':cat2' => 'Politics', ':cat3' => 'Sport', ':cat4' => 'Travel' );

{{1}}