好的,我的问题是我有一个脚本加载到每个页面上,它通过检查名为"禁止"的列来检查是否禁止登录用户。可输出0(未禁止)或1(禁止)。我已经尝试过搜索这个,但没有找到一个表现更好的绝对答案:
获取COUNT(*)查询:
$query = $PDO->prepare("SELECT COUNT(*) FROM users WHERE id = :ID AND banned = 1");
$query->execute(array(":ID" => $USER_ID));
if ($query->fetchColumn() > 0) {
// USER IS BANNED! SHOW ERROR MESSAGE!
}
使用rowCount()而不是抓取:
$query = $PDO->prepare("SELECT banned FROM users WHERE id = :ID AND banned = 1");
$query->execute(array(":ID" => $USER_ID));
if ($query->rowCount() > 0) {
// USER IS BANNED! SHOW ERROR MESSAGE!
}
答案 0 :(得分:1)
fetchColumn()和rowCount()都被mysql所取代
(1)如果mysql中的数据太多,则会影响执行
(2)另一个,你可以认为它们是相同的,你可以同时使用它们
如果选择第一种方法,mysql会返回所有数据结果, 它将使用数据转换,网络,时间等
所以你应该考虑你真正的环境来决定使用哪一个。
答案 1 :(得分:0)
我用200k随机生成的条目执行了一个基准测试,其中包含三列id,name和banned。随机选择了3467名用户被禁止。我在AWS微实例上使用以下配置:
PHP 7.0.30-0
Ubuntu 0.16.04.1
MySQL 5.7.22-0
基准测试结果:
COUNT(*) execution took 0.00022506713867188 seconds
rowcount() execution took 0.00011420249938965 seconds
rowcount()
是赢家。