2015-05-04 141 views
-1

我正在試驗存儲過程返回給我一個遞歸父列表。 但不是返回給我一個結果,就像在PhpMyAdmin中一樣,mysql_query只是返回一個布爾值true。PHP的mysql_query返回TRUE的SELECT

mysql_query("DROP FUNCTION IF EXISTS `GetAncestry`") or die(mysql_error()); 

$sql = "[CREATE SQL FUNCTION THAT LOOPS TO RETURN A STRING CONTAINING A COMMA DELIMITED STRING OF ID's]"; 

mysql_query($sql) or die(mysql_error()); 

$sql = "SELECT SubProcessID,GetAncestry(SubProcessID) as parents from prodsubprocess where SubProcessID = {$processID}"; 

mysql_query($sql) //<--- Returns TRUE, but in PhpMyAdmin returns 7,6,8 
+0

你是說... PhpMyAdmin返回預期的數據集,對嗎?但函數mysql_query返回true,但沒有數據集,對吧?編輯:好吧,我現在明白,你更新了你的問題,讓我檢查 – JuanBonnett

+0

@JuanBonnett是的,我期望檢索數據使用'mysql_fetch_array',但相反,我得到的是一個布爾值。 –

+1

停止使用depidcated'mysql_ *'API。在準備好的語句中使用'mysqli_'或'PDO'。 – Jens

回答

4

documentation:

對於SELECTSHOWDESCRIBEEXPLAIN等語句 返回resultsetmysql_query()成功返回, 或FALSE在錯誤的資源。

您需要使用mysql_fetch_assoc爲目的,

$result = mysql_query($sql); 
while ($row = mysql_fetch_assoc($result)) { 
    //fetch result 
} 

注:mysql_*被depricated;請使用PDO()準備語句的數據庫查詢

+0

如果您使用文檔 – Jens

+0

中的部分文本,則應該添加引用。我不明白爲什麼這是可接受的答案。它似乎沒有顯示問題的解決方案。如果'mysql_query'返回'TRUE',這是如何改變的?就我個人而言,我必須使用我無法控制的服務器。我對系統管理員沒有任何影響,並且未啓用pdo_mysql和mysqli擴展。我必須使用mysql_ *函數,這不能回答我的問題。我已經在使用'mysql_fetch_assoc',這樣做時,我得到一個警告,提示參數是一個布爾值。儘管做了一個SELECT語句,但我確認它是'TRUE'。 –

+0

它也是OP要的結果集 – Tushar

1

我必須注意的第一件事就是:不要再使用mysql_,去mysqli_。

您還想使用準備好的語句。

在phpmyadmin上,它會自動返回所有結果,因爲這是它被編碼的方式。如果你只是簡單地執行查詢,它告訴你的是它是否被成功執行,在這種情況下,因爲它是TRUE,所以它正在工作。

你想在這種情況下,做的是:

$result = mysql_query($sql); 

while($row = mysql_fetch_assoc($result)){ 
    print_r($row); 
} 

但嚴重的是,退房準備語句。有很多關於php.net的信息,只需看看這裏:http://php.net/manual/en/mysqli.prepare.php

「範例」區域爲您提供了大量基本信息。

2

如你的int documentation看到:

對於其他類型的SQL語句,INSERT,UPDATE,DELETE,DROP等, 的mysql_query的()在成功時返回TRUE或在錯誤時返回FALSE。

對於SELECT,SHOW,DESCRIBE,EXPLAIN和其他返回的語句 resultset,mysql_query()返回成功的資源,或者FALSE的 錯誤。

您必須輸入cal mysql_fetch_assoc才能獲取值。

停止使用deprcated mysql_ * API。在準備好的語句中使用mysqli_或PDO

0

在Phpmyadmin中,您將自動獲得該存儲過程的結果。但在php級別,它會給你結果狀態爲TRUE或FALSE。如果您想在PHP級別看到結果,那麼您必須使用loping構造來循環返回的數據庫資源以獲取每個值。

這裏是通過循環獲取數據的代碼。

// Code goes Here. 
while($row = mysql_fetch_assoc($sql)) 
{ 
    print_r($row); 
}