PHP中存入变量的文本用于SQL查询无结果,求解决方案
问题解决:变量拼接SQL查询无结果
问题原因
你的代码中,字符串类型的变量$f_name拼入SQL语句时没有加单引号,导致生成的SQL是:
SELECT * from users where f_name=Tom
数据库会把Tom识别成列名或关键字,而非字符串值,因此无法匹配到正确数据。
解决方案
1. 拼接时补充单引号(不推荐,有注入风险)
直接在变量前后添加单引号,让数据库识别为字符串:
$f_name="Tom"; $select_user="SELECT * from users where f_name='$f_name'";
⚠️ 注意:这种写法存在SQL注入风险,如果用户输入包含特殊字符(比如' OR 1=1 --),会导致恶意SQL执行。
2. 使用预处理语句(推荐,安全可靠)
预处理语句会自动处理字符串的引号和转义,同时避免SQL注入,是行业标准写法:
PDO示例
$f_name = "Tom"; // 初始化PDO连接(替换为你的数据库信息) $pdo = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password'); // 准备预处理语句 $stmt = $pdo->prepare("SELECT * from users where f_name = :f_name"); // 绑定变量 $stmt->bindParam(':f_name', $f_name); // 执行查询 $stmt->execute(); // 获取结果 $user = $stmt->fetch(PDO::FETCH_ASSOC);
MySQLi示例
$f_name = "Tom"; // 初始化MySQLi连接(替换为你的数据库信息) $mysqli = new mysqli("localhost", "username", "password", "your_database"); // 准备预处理语句 $stmt = $mysqli->prepare("SELECT * from users where f_name = ?"); // 绑定变量("s"表示字符串类型) $stmt->bind_param("s", $f_name); // 执行查询 $stmt->execute(); // 获取结果集 $result = $stmt->get_result(); // 取出数据 $user = $result->fetch_assoc();
内容的提问来源于stack exchange,提问作者ugwuoke luke
相关产品推荐
相关产品推荐

