我是SQL的新手(现在正在阅读)。我想知道在PHP中是否有更好的方法来获取MySQL数据项而不是以下内容:
$sql = "SELECT `topic_id` from `topics` WHERE `user_id` = ".$userId." AND `topic` = ".$topic.";";
$topicRow = mysql_query($sql);
$row = mysql_fetch_array($topicRow);
$topicId = $row['topic_id'];
我的意思是,创建了4个变量以获得1个项目。我做错了吗?
谢谢
答案 0 :(得分:2)
vars的数量不是一个真正的问题,如果你愿意,你可以将sql-string放在你的查询中,但你并没有真正赢得任何可衡量的东西。请不要在那里寻找效率。虽然@genesis和@patapizza的答案在我看来是正确的,但它们并没有以任何方式帮助你改进你的代码,只是让它的可读性降低。
您应该查看参数化查询(请参阅使用PDO):您应该拆分内容($userId
)和SQL命令。
手册中的一个例子:
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?');
$sth->execute(array(150, 'red'));
$red = $sth->fetchAll();
您不必逃避查询中的各种内容,因此您可以免于注射。
(ow,巧合的是,只使用了2个变量.. jeeeej :))
答案 1 :(得分:1)
除非您没有SQL转义$userId
和$topic
,否则您的代码很容易被SQL注入。我也会使用PDO API而不是数据库管理系统。
答案 2 :(得分:0)
您总是可以使用数据库抽象层,例如ADOdb。
问题是,您不希望不断涉及转义变量,并且查询连接是不应该在代码中的许多地方完成的事情。拥有所有这些,你可以做的最好的事情,是真的,使用像ADOdb这样的东西,或者做一些你自己的东西,以防ADOdb不能满足你的需求。
从架构师的角度来看,将逻辑,实际程序逻辑与诸如获取数据的技术手段(开放连接,定义命令,获取结果,读取结果等)混合在一起是完全错误的。在那个逻辑中,你只需要获取数据。您不需要在逻辑中看到数据库连接。