2013-05-17 27 views
-1
$query= "select * from table ORDER BY RAND()" ; 
$result = mysql_query($query); 
if(!isset($_get['submit'])) 
    $_SESSION['a']=$result; 
else 
    $result=$_SESSION['a'] ; 
while ($row = mysql_fetch_array($result)) { 
    echo $row["names"]; 
} 
echo "<input name='submit' type='submit' value='Submit'>"; 

這當然不是所有的代碼,但問題是在這裏:(前約翰·丹·瑪麗)記憶MySQL查詢與蘭特在PHP

所以第一次我的網頁打開了隨機順序名

,並提交表單後(帶我到同一頁),它是(根據我試過的解決方案)列出了不同的隨機順序(丹瑪麗·約翰)的名字或我得到這個錯誤:

Warning: mysql_fetch_array() expects parameter 1 to be resource, 
integer(or array) given in C:\wamp... 

我想要提交表格姓名以保留在預先提交的訂單中。

回答

1

mysql_query結果不是在你打算做的方式可緩存。你將需要做的通過像這樣的行中循環:

$row = array(); 
while ($r = mysql_fetch_assoc($row)) { 
    $row[] = $r; 
} 
$_SESSION['rows'] = $row; 

這將在隨後的會議上通過精美,可重複使用。

除此之外,table是保留關鍵字。使用反引號來逃避它。

如果您想要技術原因,mysql_query的返回實際上是一個MySQL資源指標,它是一個整數。每個新的腳本實例都將重置。這就是它失敗的原因。

P.S:ORDER BY RAND()在性能上極差。尋找替代品!

1

如果你的mysql tablename是「表」,那麼你正在使用保留關鍵字作爲表名使用反引號操作符

$query= "select * from `table` ORDER BY RAND()" ; 
+0

它沒有,只是這樣命名,所以在這裏沒有直截了當,但感謝輸入 –

0

該腳本不記憶訂單,記憶查詢記錄集。所以rand()函數每次都會重新加載。

if(!isset($_REQUEST['submit'])) 
{ 
    $query= "select * from table ORDER BY RAND()" ; 
    $result = mysql_query($query); 

    $names = array(); 

    while ($row = mysql_fetch_array($result)) { 
     $names[] = $row['name']; 
    } 

    $_SESSION['names'] = serialize($names); 
} 

echo implode(', ', unserialize($_SESSION['names'])); 
echo "<input name='submit' type='submit' value='Submit'>"; 

你應該生成名稱的隨機順序,將其保存到一個會話,然後使用會話輸出的名稱,而不是查詢的

0

你所得到的錯誤是,當你沒有任何結果都會返回,但您仍然試圖提取結果。在嘗試獲取結果之前,您應該使用mysql_num_rows檢查結果集。

如果您希望結果按照它們提交給數據庫的順序返回,我建議您使用主鍵(假設您使用user_id或其他ID作爲主鍵)進行排序。