[英]How to insert a PHP variable into an SQL query
我有一个SQL查询
qry1 =
"SELECT DISTINCT (forename + ' ' + surname) AS fullname
FROM users
ORDER BY fullname ASC";
这从名为users的表中获取forename和surname,并将它们连接在一起,在中间放置一个空格,并按升序排列。
然后我将它放入一个数组并循环遍历它以在选择下拉列表中使用。
但是,我现在想要做的是将fullname与另一个名为users的表中名为username的列进行比较。
我正在努力解决如何编写查询的问题。 到目前为止我有......
$qry2
"SELECT username
FROM users
WHERE (forename + ' ' + surname) AS fullname
=" . $_POST['Visiting'];
对我做错了什么建议?
而是将两列一起CONCAT 。 还要记住在将任何变量添加到查询之前将其转义。
$qry2 =
"SELECT username AS fullname
FROM users
WHERE CONCAT(forename, ' ', surname)
='" . mysqli_real_escape_string($connection, $_POST['Visiting']) . "'";
其中$ connection是您当前的数据库连接
我不确定在'WHERE'之后使用声明的单词'AS'原则上是正确的。
如果您使用MySQL,查询应如下所示:
SELECT [columns]
FROM [tables] [AS declareTableName]
WHERE [condition]
GROUP BY [declares|columns]
SORT BY [declares|columns]
但是,我认为你的问题不在查询中。 查询中的连接名称不正确。 您必须将字符串与后端中的名称分开,然后在查询中使用它:
$names = explode(' ', $_POST['Visiting']);
假设您使用PDO,这可能会有效:
$qry2 = "SELECT username FROM users
WHERE CONCAT(forename, ' ', surname) = '" . $conn->quote($_POST['Visiting']) . "'";
...但您应该通过SQL注入查看可能存在的漏洞。
在不知道用于连接MySQL数据库的库的情况下,无法正确建议您应该使用哪种方法来转义用户的输入。 quote
是用于转义的PDO方法, real-escape-string
相当于MySQLi
你应该真的参考使用PDO。 使用PDO时,您可以将参数绑定到查询的指定部分。 PDO还具有内置的SQL注入预防功能,这是一种很好的安全措施,您无需自己处理。 我希望这回答了你的问题。 请参阅下面的示例。
例:
// Create a new PDO object holding the connection details
$pdo = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
// Create a SQL query
$query = "SELECT username FROM users WHERE (forename + ' ' + surname) AS fullname = :visiting;";
// Prepare a PDO Statement with the query
$sth = $pdo->prepare($query);
// Create parameters to pass to the statement
$params = [
':visiting' => $_POST['Visiting']
]
// Execute the statement and pass the parameters
$sth->execute($params);
// Return all results
$results = $sth->fetchAll(PDO::FETCH_ASSOC);
如果您对PDO有任何其他疑问,请参阅以下内容:
官方PDO文件:
http://php.net/manual/en/book.pdo.php
有关如何绑定变量的文档:
http://php.net/manual/en/pdostatement.bindparam.php
您可以使用此构造(没有“AS fullname”和变量周围的撇号):
$qry2 "SELECT username FROM users WHERE (forename + ' ' + surname) = '" . $_POST['Visiting'] . "'";
但为了更好的安全性(SQL注入),您应该使用转义的转义。 例如,这种构造,如果您使用MySQL数据库:
$qry2 "SELECT username FROM users WHERE (forename + ' ' + surname) = '" . mysql_real_escape_string($_POST['Visiting']) . "'";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.