相关疑难解决方法(0)

如何使用准备好的PDO语句设置ORDER BY参数?

我在ORDER BYSQL 的部分使用params时遇到问题.它不会发出任何警告,但不打印任何内容.

$order = 'columnName';
$direction = 'ASC';

$stmt = $db->prepare("SELECT field from table WHERE column = :my_param ORDER BY :order :direction");
$stmt->bindParam(':my_param', $is_live, PDO::PARAM_STR);
$stmt->bindParam(':order', $order, PDO::PARAM_STR);
$stmt->bindParam(':direction', $direction, PDO::PARAM_STR);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)

:my_param作品,但没有:order:direction.是不是在内部正确转义?我是不是直接插入SQL?像这样:

$order = 'columnName';
$direction = 'ASC';

$stmt = $db->prepare("SELECT * from table WHERE column = :my_param ORDER BY $order $direction");
Run Code Online (Sandbox Code Playgroud)

PDO::PARAM_COLUMN_NAME常数还是等价?

谢谢!

php mysql pdo

33
推荐指数
4
解决办法
5万
查看次数

6
推荐指数
4
解决办法
8218
查看次数

在SQL Server上使用PDO时,为什么不能按列别名进行排序?

注意:以下示例中的唯一区别是ORDER BY子句.

好代码:

$sql = 'SELECT [date], ? AS [name] 
FROM [transactions] 
WHERE [category_id] = 10 
GROUP BY [date] 
ORDER BY [date] ASC';

$stmt = $db->prepare($sql);
$stmt->bindValue(1, 'Test', PDO::PARAM_STR);
$stmt->execute();
$data = $stmt->fetchAll();
//returns rows in $data
Run Code Online (Sandbox Code Playgroud)

不好的代码:

$sql = 'SELECT [date], ? AS [name] 
FROM [transactions] 
WHERE [category_id] = 10 
GROUP BY [date] 
ORDER BY [date] ASC, [name] ASC';

$stmt = $db->prepare($sql);
$stmt->bindValue(1, 'Test', PDO::PARAM_STR);
$stmt->execute();
$data = $stmt->fetchAll();
//returns an empty array
Run Code Online (Sandbox Code Playgroud)

为什么我的第二段代码不起作用?如果我直接运行此查询的任一版本(在SQL Management Studio中),它可以以任何方式工作.如果我摆脱PHP中的问号并将值硬编码到查询中(而不是绑定它),那也是有效的!这里发生了什么? …

php sql sql-server pdo prepared-statement

6
推荐指数
1
解决办法
1277
查看次数

为什么ORDER BY子句中的绑定参数不对结果进行排序?

我在PDO语句中的ORDER BY子句中绑定参数时遇到问题.似乎没有将"orderBy"传递给查询,因为结果不是按照它们的预期排序的.当我使用诸如price查询中的列名 而不是参数时,结果按该列排序.代码是:

class Products {
    const ORDER_BY_NAME='name';
    const ORDER_BY_PRICE_PER_UNIT='price_per_unit';
    const ORDER_BY_PRICE='price';
    const ORDER_BY_MINIMUM_QUANTITY='minimum_quantity';

    // function returns array of all products

    public function getAllProducts($orderBy) { 
        $db=Registry::getVariable('db');
        $pdoStatement=$db->prepare("SELECT name, minimum_quantity, price_per_unit, price, id FROM products ORDER BY :orderBy;");
        $pdoStatement->bindParam(':orderBy', $orderBy, PDO::PARAM_STR);
        $pdoStatement->execute();
        return $pdoStatement->fetchAll(PDO::FETCH_ASSOC);
    }
}
Run Code Online (Sandbox Code Playgroud)

后来我打电话给:

 $products=new Products();

 echo $products->getAllProducts(Products::ORDER_BY_PRICE);
Run Code Online (Sandbox Code Playgroud)

为什么不在命令中使用:orderBy参数?

php mysql sql pdo

1
推荐指数
1
解决办法
3815
查看次数

标签 统计

pdo ×3

php ×3

sql ×3

mysql ×2

database ×1

performance ×1

prepared-statement ×1

sql-server ×1