如何在查询中连接参数

时间:2009-12-02 20:33:13

标签: php mysql

我想在以下查询中使用参数,但我不确定如何使用。

如果你能帮助我,我会很高兴。

$ 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

3 个答案:

答案 0 :(得分:2)

查看this PHP manual

首先为图库名称创建一个字符串。 “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);