2010-12-01 57 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(); 
} 
?>