2015-11-09 12 views
3

我試圖用各自的信息填充各種html選擇。爲此,我覺得正確的方法是爲每個人查詢。我做這個PHP標籤的第一個查詢,以填補第一select這樣的:在一個單一的PHP上做兩個查詢會拋出第二個不可捕獲

<?php 
$sql = "call mydb.getPositions();"; 
$result = $conn->query($sql); 

while($row = $result->fetch_row()){ 
    echo "<option>".$row[0]."</option>"; 
} 
?> 

就是這樣。簡單。有用。功能getPositions()select。但是,當我試圖與它自己的查詢來填充下選擇/組合框,它開始拋出這個錯誤:

Fatal error: Call to a member function fetch_row() on a non-object in file.php in line 200

我搜索了很多理由像在查詢中錯別字或獲取行錯誤從delete查詢。 但是爲了放棄這些錯誤,我決定一個接一個地複製完全相同的php標籤。所以,如果第一個工作,爲什麼不第二個工作?所以我看到我收到了同樣的錯誤。我錯過了什麼?我試圖關閉$result,但沒有成功。

在此先感謝。

編輯。 當我說「我決定後,其他完全相同的PHP代碼拷貝一個」我真正的意思是這樣的:

<?php 
$sql = "call mydb.getPositions();"; 
$result = $conn->query($sql); 

while($row = $result->fetch_row()){ 
    echo "<option>".$row[0]."</option>"; 
} 
?> 
<?php 
$sql = "call mydb.getPositions();"; 
$result = $conn->query($sql); 

//It throws the error down here 
while($row = $result->fetch_row()){ 
    echo "<option>".$row[0]."</option>"; 
} 
?> 

而這將引發之前所描述的同樣的錯誤。

EDIT2。 的過程是這樣的:

CREATE DEFINER=`mainSoccer`@`%` PROCEDURE `getPositions`() 
BEGIN 
    Select namePosition from mydb.Position; 
END 

回答

1

看起來你的問題實際上是:我如何在php腳本中運行兩次相同的MySQL查詢?如果是這樣,這裏的答案:「爲什麼不,我要創建一個MySQL程序」

<?php 
$sql = "Select namePosition from mydb.Position;"; 
$result = $conn->query($sql); 

while($row = $result->fetch_row()){ 
    echo "<option>".$row[0]."</option>"; 
} 
?> 
<!-- presumably you have other code in between here --> 
<?php 
$sql = "Select namePosition from mydb.Position;"; 
$result = $conn->query($sql); 

while($row = $result->fetch_row()){ 
    echo "<option>".$row[0]."</option>"; 
} 
?> 

而且在我原來的回答您的評論如下,你問兩個答案:

  1. 您的初始代碼是創建兩次相同的過程。這肯定會在MySQL級別引發錯誤。通常一個創建該程序一次直接在您的服務器上永久重用,這樣許多不同的腳本就可以隨時調用(不創建)該程序。
  2. 對於具有性能問題的複雜的大型MySQL操作,您應該使用MySQL過程,以提高預編譯過程的效率。您的查詢非常簡單,不需要MySQL程序。

希望這會有所幫助。

+0

對於遲到的回答我很抱歉。你的回答是有點解決方案。我仍然不知道如何執行MySQL函數,但是因爲我的項目有點小,我只是把函數體放在$ sql中(select * from ....),並且每次執行一次「function 「需要被調用。不管怎麼說,還是要謝謝你。 – MarAvFe

0

因爲你只發布你的代碼的作品,但不是不工作的代碼,你不能得到具體的幫助。

但是我可以告訴你,你引用的錯誤「致命錯誤:調用第200行的file.php中的非對象上的成員函數fetch_row()」通常是在編寫無效SQL時引起的。

首先確認您正在嘗試的SQL作爲原始SQL運行,例如在phpMyAdmin中。

+0

對不起。我添加了一個編輯來更清晰地顯示不起作用的那部分代碼。 – MarAvFe

+0

所以下一個問題是你的神祕SQL裏面發生了什麼「調用mydb.getPositions()」 - 也許getPositions()代碼中的邏輯解釋了你不能在這個上下文中再次調用它? = – alanng

+0

在編輯時添加了它。謝謝。 – MarAvFe

相關問題