【发布时间】:2010-10-23 02:34:48
【问题描述】:
使用 PHP 从 MySQL 数据库中读取单个记录的最佳方式是什么?例如:
SELECT id FROM games
我试图在旧问题中找到答案,但没有运气。
【问题讨论】:
-
"SELECT id FROM games" 将返回所有条记录。如果您想要一个字段 (id) 中的所有可能值,则以下答案是正确的。如果需要一行,则需要在 SQL 语句中添加 WHERE 子句。
使用 PHP 从 MySQL 数据库中读取单个记录的最佳方式是什么?例如:
SELECT id FROM games
我试图在旧问题中找到答案,但没有运气。
【问题讨论】:
$id = mysql_result(mysql_query("SELECT id FROM games LIMIT 1"),0);
【讨论】:
$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);
ChrisAD 回答中缺少一些东西。连接到 mysql 后,选择数据库很重要,die() 语句可以让您在发生错误时查看错误。
请注意,它仅在数据库中有 1 条记录时才有效,因为否则您需要添加 WHERE id=xx 或类似的东西才能仅一行而不是更多。你也可以像$row['id']一样访问你的ID
【讨论】:
$id = mysql_result($result,0) 只为您提供了您所要求的一个值。如果您不想,您不必将整行提取到关联数组中。
使用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;
}
您显然还应该检查PDO::query() 是否可以正常执行查询(通过检查结果或告诉 PDO 抛出异常来代替)
【讨论】:
假设您使用的是自动递增的主键,这是正常的处理方式,那么您可以访问您放入数据库的最后一行的键值:
$userID = mysqli_insert_id($link);
否则,您必须了解更多关于您要查找的行的详细信息,例如电子邮件地址。在不知道您的表结构的情况下,我们无法更具体。
无论哪种方式,要限制您的 SELECT 查询,请使用如下 WHERE 语句:
(通用示例)
$getID = mysqli_fetch_assoc(mysqli_query($link, "SELECT userID FROM users WHERE something = 'unique'"));
$userID = $getID['userID'];
(具体例子) 或者更具体的例子:
$getID = mysqli_fetch_assoc(mysqli_query($link, "SELECT userID FROM users WHERE userID = 1"));
$userID = $getID['userID'];
【讨论】:
警告!您的 SQL 不是一个好主意,因为它将选择所有行(没有 WHERE 子句假定“WHERE 1”!)如果您有大量行,则会阻塞您的应用程序。 (当1将执行1,000行时选择1,000行的点?)所以当仅选择一行时,请确保指定限制子句:
$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'];
这种差异要求 MySQL 只选择第一个匹配的记录,因此对表进行排序很重要,否则您应该使用 WHERE 子句。但是,与获取每条记录并输出第一行相比,查找一条记录所需的内存和时间要少得多。
【讨论】:
使用 LIMIT 1。它很容易。
$rows = $db->query("select id from games LIMIT 1");
$row = $rows->fetch_object();
echo $row->id;
【讨论】:
面向对象风格的另一个答案。为我找到了这个解决方案:
$id = $dbh->query("SELECT id FROM mytable WHERE mycolumn = 'foo'")->fetch_object()->id;
只返回一个 id。验证您的设计是否能确保您得到正确的设计。
【讨论】:
首先你连接到你的数据库。然后构建查询字符串。然后启动查询并存储结果,最后使用其中一种 fetch 方法从结果中提取所需的行。
$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;
编辑:很抱歉,忘记了数据库连接。现在添加了
【讨论】:
除了使用 PHP 从数据库中检索单个记录的一些常用方法之外,“最佳方式”如下所示:
$sql = "SELECT id, name, producer FROM games WHERE user_id = 1";
$result = $db->query($sql);
$row = $result->fetch_row();
//表格类内部
$select = $this->select()->where('user_id = ?', 1);
$row = $this->fetchRow($select);
【讨论】:
最简单的方法是使用mysql_result。
我从其他答案中复制了下面的一些代码以节省时间。
$link = mysql_connect('localhost','root','yourPassword')
mysql_select_db('database',$link);
$sql = 'SELECT id FROM games'
$result = mysql_query($sql,$link);
$num_rows = mysql_num_rows($result);
// i is the row number and will be 0 through $num_rows-1
for ($i = 0; $i < $num_rows; $i++) {
$value = mysql_result($result, i, 'id');
echo 'Row ', i, ': ', $value, "\n";
}
【讨论】:
我非常喜欢ezSQL database library 的理念,它将原生 SQL 方法封装在一个更易于使用的界面中。
从数据库中获取单个值很简单:
$id = $db->get_var("SELECT id FROM games WHERE ...");
它还可以轻松获取单行、列或一组行。
【讨论】:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$db = new mysqli('localhost', 'tmp', 'tmp', 'your_db');
$db->set_charset('utf8mb4');
if($row = $db->query("SELECT id FROM games LIMIT 1")->fetch_row()) { //NULL or array
$id = $row[0];
}
【讨论】:
我同意 mysql_result 是从 MySQL 结果集中检索一个单元格内容的简单方法。小代码:
$r = mysql_query('SELECT id FROM table') or die(mysql_error());
if (mysql_num_rows($r) > 0) {
echo mysql_result($r); // will output first ID
echo mysql_result($r, 1); // will ouput second ID
}
【讨论】:
使用 PHP 列表从 MySQL 数据库中获取单个记录的简单方法
SQL 查询是SELECT user_name from user_table WHERE user_id = 6
上述查询的 PHP 代码是
$sql_select = "";
$sql_select .= "SELECT ";
$sql_select .= " user_name ";
$sql_select .= "FROM user_table ";
$sql_select .= "WHERE user_id = 6" ;
$rs_id = mysql_query($sql_select, $link) or die(mysql_error());
list($userName) = mysql_fetch_row($rs_id);
注意:列表概念应该适用于单行提取而不是多行
【讨论】:
如果在最后添加LIMIT 1 来优化SQL 更好:
$query = "select id from games LIMIT 1";
所以答案是 (适用于 php 5.6.3):
如果要获取第一行的第一项(即使不是ID列):
queryExec($query) -> fetch_array()[0];
如果您想获取第一行(从数据库中获取单个项目)
queryExec($query) -> fetch_assoc();
如果你想从第一行得到一些确切的列
queryExec($query) -> fetch_assoc()['columnName'];
或需要修复查询并使用第一种书面方式:)
【讨论】:
首先:创建连接
$conn = new mysqli('localhost', 'User DB', 'Pass DB', 'Table name');
然后获取记录目标:
$query = "SELECT id FROM games LIMIT 1"; // for example query
$result = $conn->query($query); // run query
if($result->num_rows){ //if exist something
$ret = $result->fetch_array(MYSQLI_ASSOC); //fetch data
}else{
$ret = false;
}
var_dump($ret);
【讨论】:
假设您要计算现有表中的行数:
使用只有一个参数设置为“0”的 mysql_result
像这样:
$string = mysql_result(
mysql_query("SELECT COUNT(*) FROM database_name.table_name ")
,0);
在 database_name 和 table_name 周围放置 (`)
var_dump($string);
// string(1) "5" //if it only has 5 records in the table
注意:如果您查询其他内容,例如
SELECT * FROM database.table LIMIT 1
如果表格有多个列,那么您将不会在 var_dump 中获得array(),您只会获得第一列
【讨论】:
function getSingleRow($table, $where_clause="", $column=" * ",$debug=0) {
$SelectQuery = createQuery($table, $where_clause, $column);
$result = executeQuery($SelectQuery,$debug);
while($row = mysql_fetch_array($result)) {
$row_val = $row;
}
return $row_val;
}
【讨论】:
$results = $mysqli->query("SELECT product_code, product_name, product_desc, product_img_name, price FROM products WHERE id = 1");
【讨论】:
我可以通过以下方式获得结果:
$resu = mysqli_fetch_assoc(mysqli_query($conn, "SELECT * FROM employees1 WHERE pkint =58"));
echo ( "<br />". $resu['pkint']). "<br />" . $resu['f1'] . "<br />" . $resu['f2']. "<br />" . $resu['f3']. "<br />" . $resu['f4' ];
employees 1 是表名。 pkint 是主键 ID。 f1,f2,f3,f4 是字段名称。 $resu 是结果的变量快捷方式。 以下是输出:
<br />58
<br />Caroline
<br />Smith
<br />Zandu Balm
【讨论】: