php - MySQL 变量字符串查询仅适用于数字而不适用于文本

标签 php mysql

我有一个名为 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/

相关文章:

PHP - 提交页面返回内部服务器错误

mysql - 如何选择包含用户输入的列?

mysql - 由于 order by ,简单查询非常慢

Python内部类自身

php - 为几个页面设置 SSL

php - 在每四个 mysql 表行上启动 PHP echo

php - 调用未定义的方法 mysqli_stmt::get_result

php - PHP Mysql从多个搜索框数组添加到购物车

mysql - 类(class)明智,具有最大总分的学生姓名

php - Yii 框架的 Yiistrap 中的 Bootstrap 路径和 CDN URL 无效