2010-12-01 56 views
0

示例代码:关于请求mysql_query - > mysql_fetch_array()过程

$infoArray = array(); 
require_once("connectAndSelect.php"); 
// Connects to mysql and selects the appropriate database 
$sql = "SOME SQL"; 
if($results = mysql_query($sql)) 
{ 
    while($result = mysql_fetch_array($results, MYSQL_ASSOC)) 
    { 
     $infoArray[] = $result; 
    } 
} 
else 
{ 
    // Handle error 
} 
echo("<pre>"); 
print_r($infoArray); 
echo("</pre>"); 

在此示例代码,我只是想找到自己在$ infoArray查询的结果。简单的任务,简单的措施...不。 我会喜欢这样的事情:

$sql = "SOME SQL"; 
$infoArray = mysql_results($sql); 

但是,没有,你可以看到,我有两个额外的变量,这是我不喜欢太多while循环。他们实际上并没有做任何事情:我永远不会再使用它们。此外,我从来不知道如何给他们打电话。在这里,我使用$ results和$ result,它们表示它们是什么,但也可能相当混乱,因为它们看起来非常相似。因此,这里是我的问题:

  1. 有什么,我 不知道对于这种 任务的更简单的方法?
  2. 如果不是的话,你会给 提供那些一次性变量的名字吗?有 有没有标准?
+0

的,而循环是确保您将获取所有结果由MySQL返回** **如果你以前的SQL返回多个匹配。所以你不能跳过他们,否则是**不完整** – ajreal 2010-12-01 17:21:20

回答

0

除非你被现有的代码库遗留下来。不要使用mysql扩展名。使用PDOMysqli。 PDO是两者中的首选。

你举的例子可以来一套非常consise语句与PDO:

// create a connection this could be done in your connection include 
$db = new PDO('mysql:host=localhost;dbname=your_db_name', $user, $password); 

// for the first or only result 
$infoArray = $db->query('SOME SQL')->fetch(PDO::FETCH_ASSOC); 

// if you have multiple results and want to get them all at once in an array 
$infoArray = $db->query('SOME SQL')->fetchAll(PDO::FETCH_ASSOC); 

    // if you have multiple results and want to use buffering like you would with mysql_result 
    $stmt = $db->query('SOME SQL'); 
    foreach($stmt as $result){ 
    // use your result here 
    } 

但是当你现在有查询变量应该只使用以上。如果有,他们需要进行转义......来处理最简单的方法变量是用事先准备好的声明:

$stmt = $db->prepare('SELECT * FROM some_table WHERE id = :id'); 
$stmt->execute(array(':id' => $id)); 

// get the first result 
$infoArray = $stmt->fetch(PDO::FETCH_ASSOC); 

// loop through the data as a buffered result set 
while(false !== ($row = $stmt->fetch(PDO::FETCH_ASSOC))){ 
    // do stuff with $row data 
} 
+0

我从来没有听说过PDO。你能提供一个链接吗? – Shawn 2010-12-01 17:17:32

1

while循环真的只需要你期待多行归还。如果你只是获得一行,你可以简单地使用mysql_fetch_array()。

$query = "SOME SQL"; 
$result = mysql_query($query); 
$row = mysql_fetch_array($result); 

对于单线返回是我使用的标准。在PHP中这样做确实有点笨拙,但至少你已经将流程分解为可调试的步骤。

0

使用PDO:

<?php 

/*** mysql hostname ***/ 
$hostname = 'localhost'; 

/*** mysql username ***/ 
$username = 'username'; 

/*** mysql password ***/ 
$password = 'password'; 

try { 
    $dbh = new PDO("mysql:host=$hostname;dbname=mysql", $username, $password); 
    $sql = "SELECT * FROM myTable"; 
    $result = $dbh->query($sql) 
    //Do what you want with an actual dataset 
} 
catch(PDOException $e) { 
    echo $e->getMessage(); 
} 
?>