mysql - 使用变量对MySQL表进行排序

标签 mysql variables

我想使用 name 变量对我的 SQL 表进行排序。

if (isset($_POST['name']))
{
    $name = $_POST['name'];
}

我已经打印了变量,它是modelName。现在我想使用字段 modelName 对表进行排序。

如果我使用此代码,它不起作用:

$statement = $pdo->query('SELECT `ID`, `modelName`, `datecreated` FROM `modeldb` ORDER BY "' . $name . '"');

但是如果我使用这段代码,它就会起作用:

$statement = $pdo->query('SELECT `ID`, `modelName`, `datecreated` FROM `modeldb` ORDER BY modelName');

我使用的变量是否错误?

最佳答案

欢迎来到编程,

您应该像下面一样回显您的 SQL 查询,以评估您的输入生成的查询类型。

echo 'SELECT ID、modelName、datecreated FROM modeldb ORDER BY "' . $name . '"'

您会发现根本不需要"

编程的一个规则是永远不要相信用户输入。在这里您将注入(inject)从 $_POST 收到的数据 所以你应该验证你的输入,如

$sortableColumns = ['id','modelname','datecreated']
if(in_array(strtolower($name),$sortableColumns)){
  $statement = $pdo->query('SELECT ID, modelName, datecreated FROM modeldb ORDER BY ' . $name )
}else{
  $statement = $pdo->query('SELECT ID, modelName, datecreated FROM modeldb ORDER BY id');
}

请告诉我您想要的任何其他指南。

关于mysql - 使用变量对MySQL表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59271819/

相关文章:

mysql - 无效的数据库查询是否比有效的数据库查询慢? (MySQL)

使用相同变量进行输入的 Java 简单程序 - 不起作用

java - 你如何制作一个可变的类级别?

variables - Erlang - 检查未绑定(bind)变量

mysql - SQL 返回错误总数

mysql - 加入一对多

php - 如何在 MySQL 数据库中存储版本号

mysql - 当我必须连接一个表两次时,如何在 SQL 中正确使用内连接?

php - 做一个文本变量的数学总和? (例如 5865/100 )

php - 使用变量定义 PHP 函数