mysql Pdo不会按名称排序

时间:2013-12-26 23:26:15

标签: php mysql pdo

我在排序通过pdo对象连接的数据库行时遇到问题。 它只是不会排序。 我想按产品名称(varchar)排序。 希望有人可以帮助我

这是代码:

[...]

$db = new PDO($serverPDO, $user, $pass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

[...]

if ($_SESSION['sorted'] == 1) {
    $ordered = $db->query("SELECT * FROM `produkte` ORDER BY 'produkte.preis'");
while ($order = $ordered->fetch(PDO::FETCH_ASSOC)) {
    echo "<tr>";
    echo "<td style='border-bottom:1px solid #000000;padding:20px'>".$order['produkte.name']."</td>";
    echo "<td style='border-bottom:1px solid #000000;padding:20px'>".$order['produkte.beschreibung']."</td>";
    echo "<td style='border-bottom:1px solid #000000;padding:20px'>".$order['produkte.preis']." Euro</td>";
}           
} else {
    [...]

2 个答案:

答案 0 :(得分:2)

使用反引号从produkte.preis子句或转义表名称和列名中删除order by左右的单引号:

没有逃避(因为没有必要):

$ordered = $db->query("SELECT * FROM `produkte` ORDER BY produkte.preis");

用反引号逃脱:

$ordered = $db->query("SELECT * FROM `produkte` ORDER BY `produkte`.`preis`");

如果表名和列名是MySQL Reserved words之一,则需要转义表名。

答案 1 :(得分:2)

  

'produkte.preis'

单引号中的

将被解释为字符串值,可能相当于order by 1,导致根本没有有意义的排序。

使用反引号:

`produkte.preis`