使用IN查询匹配$following中username列时返回空,求解决方法
解决IN语句查询无结果的问题
先帮你排查下用数组变量配合IN语句时最容易踩的几个坑,大概率是格式处理出了问题:
变量格式没转对:如果你的
$following是数组(比如$following = ['John', 'Sarah'];),直接把它塞进IN语句里,生成的SQL会变成IN(Array),这肯定查不到数据。你得把数组转成带单引号的字符串列表,用implode()就能搞定:$followingStr = implode("','", $following); $query = "SELECT content FROM your_table WHERE username IN ('$followingStr')";这样生成的SQL就是
SELECT content FROM your_table WHERE username IN ('John','Sarah'),就能匹配到对应的行,拿到spoke、walked这些内容了。记得规避SQL注入风险:上面的写法能解决问题,但有注入隐患,更安全的做法是用预处理语句,比如PDO的实现方式:
$placeholders = implode(',', array_fill(0, count($following), '?')); $stmt = $pdo->prepare("SELECT content FROM your_table WHERE username IN ($placeholders)"); $stmt->execute($following); $targetContent = $stmt->fetchAll(PDO::FETCH_COLUMN);这种方式既安全又能保证查询的准确性。
检查大小写匹配:还要确认数据库里的
username值和$following里的大小写完全一致,比如数据库里存的是john,但变量里是John,默认SQL排序规则是区分大小写的,这时候可以用LOWER(username) IN (LOWER('John'), LOWER('Sarah'))来做不区分大小写的匹配。
你可以先按第一种方法测试,要是还没结果,就排查下大小写问题或者换用预处理语句,应该就能拿到你想要的内容了。
内容的提问来源于stack exchange,提问作者The Codesee
相关产品推荐
相关产品推荐

