php - 我可以在 MySQL 查询中使用变量作为表名吗?

标签 php mysql

我想要一个带有变量作为表的 MySQL 查询。这是我正在寻找的内容:

mysql_query("SELECT * FROM $var WHERE $anothervar ='1'"))

我该怎么做?

最佳答案

首先,停止使用mysql_函数。它们已被弃用。查看mysqliPDO

当使用 PHP 查询数据库时,您可以根据需要构建整个查询。您可以输入完整的查询或添加变量以进行更动态的查询。您所做的是正确的(除了右侧的双括号)。

<?php
$query = "SELECT * FROM users WHERE id ='1'";

//the above will be the same as

$var = 'users';
$anothervar = 'id';
$query = "SELECT * FROM $var WHERE $anothervar ='1'";

//execute query.
?>

所以,是的,在 PHP 中构建查询时,您可以只使用变量表名称。您确实需要记住,您使用的所有变量都可能导致 SQL 注入(inject)。因此,如果您从用户输入中获取表名和列名的值,请确保正确验证它们!

仅使用mysql_real_escape_string()mysqli_real_escape_string()对表名和列名不起作用,因为它们没有用引号引起来。如果您收到列/表的用户输入并且正在连接查询,我会投票支持白名单。例如:

<?php
$allowed_tables = array("users", "articles", "messages");

if (!in_array($var, $allowed_tables)) {
  echo 'Invalid table';
  exit();
}
?>

另一本不错的读物是 how-to-prevent-sql-injection-in-php这也涉及参数化查询,这基本上就是您想要做的,但是以比连接字符串更安全的方式。

关于php - 我可以在 MySQL 查询中使用变量作为表名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16337685/

相关文章:

php - 密码加密方式? : PASSWORD() versus md5?

php - TCPDF如何设置两种文字颜色?

php - MySQL JSON 数据类型是否不利于数据检索的性能?

php - 如何获取特定的 PHP 变量以通过 AJAX 调用发送?

php - Mod_Rewrite : Testing URL got indexed in Google - How do I create a proper 301 redirect?

php - 使用 PHP 将 MySQL-spatial 更改为 geoJson

python - 用于 Python 2.7 的 MySQL

mysql - 对大量行运行 SUM

php - 如何将一个查询的结果传递到第二个查询并在一个表中显示结果?

php - 查询未发送到数据库