我想在以下查询中使用参数,但我不确定如何使用。
如果你能帮助我,我会很高兴。
$ id将是1,2或3等,我想选择C.Name是Galleri1或Galleri2等的地方。
这是我到目前为止所得到的,但我不知道如何添加$ id。
function getGallery($id){
$data = array();
$Q = $this->db->query('SELECT P.*, C.Name AS CatName
FROM products AS P
LEFT JOIN categories C
ON C.id = P.category_id
WHERE C.Name = "Galleri($id)"
AND p.status = "active"
');
更新:我正在使用PHP和MySQL
答案 0 :(得分:2)
首先为图库名称创建一个字符串。 “Galleri1”,“Galleri2”等。然后将该字符串绑定为参数以进行查询。
这样的事情:
$sth = $this->prepare('SELECT P.*, C.Name AS CatName
FROM products AS P
LEFT JOIN categories C
ON C.id = P.category_id
WHERE C.Name = ?
AND p.status = "active"
');
$gallery_name = "Galleri$id";
$sth->bind_param( 1, $gallery_name );
$q = $sth->execute();
如果你不小心的话,可以像其他回答者那样建议一个查询字符串,这可能为SQL injection attacks打开了大门。例如,如果$id="' OR 1=1 OR C.Name !='"
并将它连接到查询字符串会发生什么?
使用参数绑定,就像我上面所示,可以防止出现此问题。
答案 1 :(得分:1)
我假设您使用PHP。可能类似
function getGallery($id){
$data = array();
$Q = $this->db->query("SELECT P.*, C.Name AS CatName
FROM products AS P
LEFT JOIN categories C
ON C.id = P.category_id
WHERE C.Name = 'Galleri$id'
AND p.status = 'active'
");
你也应该知道SQL injections,所以先逃避它(如果不在其他地方完成):
function getGallery($id) {
$id = $this->db->escape($db); // or similar
如果您的数据库类支持prepared statements,则应使用它们。
答案 2 :(得分:0)
我认为你在这里寻找的是:
function getGallery($id){
$data = array();
$Q = $this->db->query('SELECT P.*, C.Name AS CatName
FROM products AS P
LEFT JOIN categories C
ON C.id = P.category_id
WHERE C.Name = "Gallery' . $id . '"
AND p.status = "active"
');
注意:我在查询中修改了Gallery的拼写,因为我认为这可能是一个错字:
Galleri
为:
Gallery
希望这有帮助!
编辑:改为使用SQL注入:
function getGallery($id){
$data = array();
$id = str_replace("'", "''", $id);
$query = 'SELECT P.*, C.Name AS CatName
FROM products AS P
LEFT JOIN categories C
ON C.id = P.category_id
WHERE C.Name = "Gallery' . $id . '"
AND p.status = "active"
'
$Q = $this->db->query($query);