【问题标题】:Simple way to read single record from MySQL从 MySQL 读取单个记录的简单方法
【发布时间】:2010-10-23 02:34:48
【问题描述】:

使用 PHP 从 MySQL 数据库中读取单个记录的最佳方式是什么?例如:

SELECT id FROM games

我试图在旧问题中找到答案,但没有运气。

【问题讨论】:

  • "SELECT id FROM games" 将返回所有条记录。如果您想要一个字段 (id) 中的所有可能值,则以下答案是正确的。如果需要一行,则需要在 SQL 语句中添加 WHERE 子句。

标签: php mysql


【解决方案1】:
$id = mysql_result(mysql_query("SELECT id FROM games LIMIT 1"),0);

【讨论】:

  • 只需添加最简单的原生 php_mysql 方法来获取单个值以确保完整性。
  • 这在 PHP 5.5.0 中已被弃用,并在 PHP 7.0.0 中被删除。
【解决方案2】:
$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

【讨论】:

  • 谢谢。所以总的来说,当我只想要一个变量时,没有什么比 mysql_fetch_assoc 更简单的了?没有直接的命令?
  • 是的,在 php 中没有更简单的方法。这是你能做的最短的。
  • 这可以运行一个返回数千行的查询
  • 这些人错了,$id = mysql_result($result,0) 只为您提供了您所要求的一个值。如果您不想,您不必将整行提取到关联数组中。
【解决方案3】:

使用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 抛出异常来代替)

【讨论】:

  • 当然,您可以同时从数据库中获取所有 10,000 款游戏。请参阅下面关于 WHERE 和 LIMIT 的答案。
  • 不,我没有那么对此感到兴奋,只是 15 个字符的限制让我这样做了:P
【解决方案4】:

假设您使用的是自动递增的主键,这是正常的处理方式,那么您可以访问您放入数据库的最后一行的键值:

$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'];

【讨论】:

    【解决方案5】:

    警告!您的 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 子句。但是,与获取每条记录并输出第一行相比,查找一条记录所需的内存和时间要少得多。

    【讨论】:

      【解决方案6】:

      使用 LIMIT 1。它很容易。

      $rows = $db->query("select id from games LIMIT 1");
      $row  =  $rows->fetch_object();
      echo $row->id;
      

      【讨论】:

        【解决方案7】:

        面向对象风格的另一个答案。为我找到了这个解决方案:

        $id = $dbh->query("SELECT id FROM mytable WHERE mycolumn = 'foo'")->fetch_object()->id;
        

        只返回一个 id。验证您的设计是否能确保您得到正确的设计。

        【讨论】:

          【解决方案8】:

          首先你连接到你的数据库。然后构建查询字符串。然后启动查询并存储结果,最后使用其中一种 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;
          

          编辑:很抱歉,忘记了数据库连接。现在添加了

          【讨论】:

          • 这可能会运行一个返回数千行的查询
          【解决方案9】:

          除了使用 PHP 从数据库中检索单个记录的一些常用方法之外,“最佳方式”如下所示:

          用 mysqli

          $sql = "SELECT id, name, producer FROM games WHERE user_id = 1";
          $result = $db->query($sql);
          $row = $result->fetch_row();
          

          使用 Zend 框架

          //表格类内部

          $select = $this->select()->where('user_id = ?', 1);  
          $row = $this->fetchRow($select);
          

          【讨论】:

            【解决方案10】:

            最简单的方法是使用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";
            }
            

            【讨论】:

              【解决方案11】:

              我非常喜欢ezSQL database library 的理念,它将原生 SQL 方法封装在一个更易于使用的界面中。

              从数据库中获取单个值很简单:

                $id = $db->get_var("SELECT id FROM games WHERE ...");
              

              它还可以轻松获取单行、列或一组行。

              【讨论】:

                【解决方案12】:
                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];
                }
                

                【讨论】:

                  【解决方案13】:

                  我同意 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
                  }
                  

                  【讨论】:

                    【解决方案14】:

                    使用 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);
                    

                    注意:列表概念应该适用于单行提取而不是多行

                    【讨论】:

                      【解决方案15】:

                      如果在最后添加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'];
                      

                      或需要修复查询并使用第一种书面方式:)

                      【讨论】:

                        【解决方案16】:

                        首先:创建连接

                        $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);
                        

                        【讨论】:

                          【解决方案17】:

                          假设您要计算现有表中的行数:

                          使用只有一个参数设置为“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(),您只会获得第一列

                          【讨论】:

                            【解决方案18】:
                            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;
                            }
                            

                            【讨论】:

                              【解决方案19】:
                              $results = $mysqli->query("SELECT product_code, product_name, product_desc, product_img_name, price FROM products WHERE id = 1");
                              

                              【讨论】:

                              【解决方案20】:

                              我可以通过以下方式获得结果:

                              $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
                              

                              【讨论】:

                                猜你喜欢
                                • 1970-01-01
                                • 1970-01-01
                                • 2011-09-19
                                • 1970-01-01
                                • 1970-01-01
                                • 2023-03-08
                                • 1970-01-01
                                • 1970-01-01
                                • 2011-05-17
                                相关资源
                                最近更新 更多