开发者社区 问答 正文

我想从两个不同的表中获取数据,其ID和特殊字符

我想从两个不同的表中获取数据,其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的数据,该怎么办。

展开
收起
社区秘书 2019-12-09 15:46:37 542 分享 版权
阿里云 AI 助理回答

在处理包含特殊字符的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注入问题。请确保对所有外部输入进行适当的验证和清理。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: