我有一个名为 Customers 的 MySQL 表,在这个表中我有一个名为 Address 的 VARCHAR 类型的字段。
我有一个 html 表单,它要求用户输入一些文本,然后用于搜索地址字段中包含该文本的任何记录。这是代码:
<FORM NAME ="addressform" METHOD ="POST" ACTION ="address.php">
Address:<INPUT TYPE = 'TEXT' Name ='Address' value="<?PHP print $Address; ?>">
<INPUT TYPE = "Submit" Name = "Submit1" VALUE = "Search">
</FORM>
这会将用户输入的输入传递给带有变量 $Address 的 address.php 文件
在 address.php 文件中,我正在运行这个 SQL 查询:
$SQL = "SELECT * FROM Customers WHERE Address LIKE '%$Address%'";
我想要它做的是返回包含用户输入的字符串的所有记录。
这是我的问题:如果用户只输入数字,它工作得很好,但如果用户输入文本字符,它什么也不返回。
如果有人能给我任何线索,说明为什么要这样做,我们将不胜感激。
谢谢
最佳答案
您的代码有两个问题:
1.XSS(HTML注入(inject))
2.SQL注入(inject)。
为了防止 HTML 注入(inject),您必须转义打印的变量。
要防止 SQL 注入(inject),您必须使用准备好的语句(更好的方法)或转义函数。
准备好的语句如下所示:
$stmt = $pdo->prepare('SELECT * FROM Customers WHERE Address LIKE ?';
$stmt->execute(['%' . $Address . '%']);
$result = $stmt->fetchAll();
Mysqli 也支持预处理语句。
如果你使用mysql_query,使用mysql_real_escape_string功能,但你应该强烈考虑使用 PDO相反。
关于php - MySQL 变量字符串查询仅适用于数字而不适用于文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30411824/