php - 有没有更好的方法从 MySQL 数据库获取项目?

标签 php mysql sql

我对 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 个项目。我做错了什么吗?

谢谢

最佳答案

变量的数量不是真正的问题,如果需要,您可以将 sql 字符串放入查询中,但您并没有真正赢得任何可衡量的东西。请不要在那里寻求效率。虽然@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();

您不必转义放入查询中的各种内容,因此可以避免注入(inject)。

(哦,巧合的是,仅使用 2 个变量.. jeeeej :) )

关于php - 有没有更好的方法从 MySQL 数据库获取项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6315022/

相关文章:

php - 使用 AJAX 检索的 Json 代码无法解析

php - 从 POST 获取动态变量

mysql - C Mysql 连接处理程序

java - Oracle 默认按行为排序

sql - 如何在 postgresql 中返回日期值?

javascript - 如何在 php 中管理多个 javascript 警报框

PHP删除某个键值之前的数组部分

mysql - Synology Diskstation 上的 "The service is disabled now."

mysql - SQL LEFT JOIN分配?

sql - 无法确定 "column ambiguously defined"错误的原因