我想要一个带有变量作为表的 MySQL 查询。这是我正在寻找的内容:
mysql_query("SELECT * FROM $var WHERE $anothervar ='1'"))
我该怎么做?
最佳答案
首先,停止使用mysql_
函数。它们已被弃用。查看mysqli或PDO 。
当使用 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/