PHP从MySQL数据库中读取单个记录的最佳方法是什么?例如:
SELECT id FROM games
Run Code Online (Sandbox Code Playgroud)
我试图在旧问题中找到答案,但没有运气.
Dan*_*man 57
$id = mysql_result(mysql_query("SELECT id FROM games LIMIT 1"),0);
Run Code Online (Sandbox Code Playgroud)
Ryt*_*ius 31
$link = mysql_connect('localhost','root','yourPassword')
mysql_select_db('database_name', $link);
$sql = 'SELECT id FROM games LIMIT 1';
$result = mysql_query($sql, $link) or die(mysql_error());
$row = mysql_fetch_assoc($result);
print_r($row);
Run Code Online (Sandbox Code Playgroud)
ChrisAD的答案中缺少一些东西.连接到mysql之后,选择数据库是至关重要的,并且die()
语句允许您在发生错误时查看错误.
小心它只有在数据库中有1条记录才有效,因为否则你需要添加WHERE id=xx
或类似的东西只能获得一行而不是更多.你也可以访问你的id$row['id']
Tom*_*igh 21
使用PDO你可以做这样的事情:
$db = new PDO('mysql:host=hostname;dbname=dbname', 'username', 'password');
$stmt = $db->query('select id from games where ...');
$id = $stmt->fetchColumn(0);
if ($id !== false) {
echo $id;
}
Run Code Online (Sandbox Code Playgroud)
你显然也应该检查是否PDO::query()
执行查询OK(通过检查结果或告诉PDO反而抛出异常)
prl*_*l77 14
假设您正在使用自动递增主键(这是正常的处理方式),那么您可以使用以下命令访问放入数据库的最后一行的键值:
$userID = mysqli_insert_id($link);
Run Code Online (Sandbox Code Playgroud)
否则,您将需要了解有关您要查找的行的更多详细信息,例如电子邮件地址.在不知道您的表结构的情况下,我们不能更具体.
无论哪种方式,要限制您的SELECT
查询,请使用如下WHERE
语句:(通用示例)
$getID = mysqli_fetch_assoc(mysqli_query($link, "SELECT userID FROM users WHERE something = 'unique'"));
$userID = $getID['userID'];
Run Code Online (Sandbox Code Playgroud)
(具体示例)或更具体的示例:
$getID = mysqli_fetch_assoc(mysqli_query($link, "SELECT userID FROM users WHERE userID = 1"));
$userID = $getID['userID'];
Run Code Online (Sandbox Code Playgroud)
警告!您的SQL不是一个好主意,因为它将选择所有行(没有WHERE子句假定为"WHERE 1"!)并且如果您有大量行,则阻塞您的应用程序.(当1执行时,选择1,000行的重点是什么?)因此,当只选择一行时,请确保指定LIMIT子句:
$sql = "SELECT id FROM games LIMIT 1"; // Select ONLY one, instead of all
$result = $db->query($sql);
$row = $result->fetch_assoc();
echo 'Game ID: '.$row['id'];
Run Code Online (Sandbox Code Playgroud)
这种差异要求MySQL 只选择第一个匹配的记录,因此对表进行排序很重要,或者你应该使用WHERE子句.但是,找到一条记录所需的内存和时间要少得多,而不是每条记录和输出第一行.
使用 LIMIT 1. 很简单。
$rows = $db->query("select id from games LIMIT 1");
$row = $rows->fetch_object();
echo $row->id;
Run Code Online (Sandbox Code Playgroud)
面向对象风格的另一种答案。为我找到了这个解决方案:
$id = $dbh->query("SELECT id FROM mytable WHERE mycolumn = 'foo'")->fetch_object()->id;
Run Code Online (Sandbox Code Playgroud)
只返回一个 id。验证您的设计确保您得到正确的设计。
首先连接到数据库。然后构建查询字符串。然后启动查询并存储结果,最后使用其中一种获取方法从结果中获取所需的行。
$link = mysql_connect('localhost','root','yourPassword')
mysql_select_db('database',$link);
$sql = 'SELECT id FROM games'
$result = mysql_query($sql,$link);
$singleRow = mysql_fetch_array($result)
echo $singleRow;
Run Code Online (Sandbox Code Playgroud)
编辑:很抱歉,忘记了数据库连接。现在添加了