我想从两个不同的表中获取数据,其ID和特殊字符
WHERE brand_name = '$brandName' AND id = '$brdid'
上面的sql可以正常工作,带有特殊字符
$reqrwqq="SELECT * FROM abdsdd
WHERE brand_name = '$brandName' AND category_name='$brandCate'
ORDER BY id DESC";
?>
直到我插入一个特殊字符,这也可以正常工作;如果我有来自两个不同ID的数据,该怎么办。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在处理包含特殊字符的SQL查询时,确保安全并防止SQL注入的最佳实践是使用参数化查询或预处理语句。对于PHP,当与MySQL数据库交互时,推荐使用PDO(PHP Data Objects)或MySQLi扩展中的预处理语句功能。
以下是使用PDO预处理语句的一个示例,这将帮助你从两个不同的表中获取数据,并且能够安全地处理包含特殊字符的查询:
<?php
// 数据库连接配置
$host = 'your_host';
$dbname = 'your_dbname';
$user = 'your_username';
$pass = 'your_password';
try {
// 创建PDO实例
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $user, $pass);
// 设置PDO错误模式为异常
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 准备SQL语句,注意使用问号作为参数占位符
$sql = "SELECT * FROM abdsdd
WHERE brand_name = :brandName AND category_name = :categoryName
ORDER BY id DESC";
// 准备预处理语句
$stmt = $pdo->prepare($sql);
// 绑定参数到预处理语句
$stmt->bindParam(':brandName', $brandName, PDO::PARAM_STR);
$stmt->bindParam(':categoryName', $brandCate, PDO::PARAM_STR);
// 设置参数值
$brandName = $_GET['brandName'] ?? ''; // 或者从POST获取,确保验证和清理输入
$brandCate = $_GET['brandCate'] ?? ''; // 同上
// 执行预处理语句
$stmt->execute();
// 获取结果
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 处理结果...
foreach ($results as $row) {
// 输出或处理每一行数据
echo "ID: " . $row['id'] . ", Brand Name: " . $row['brand_name'] . "<br>";
}
} catch (PDOException $e) {
// 错误处理
echo "Error: " . $e->getMessage();
}
// 关闭数据库连接
$pdo = null;
?>
在这个例子中,:brandName
和 :categoryName
是参数占位符,它们会被 $brandName
和 $brandCate
变量的值安全地替换,而不会引起SQL注入问题。请确保对所有外部输入进行适当的验证和清理。