2010-10-13 71 views
0

對不起,如果這是一個基本問題! 直至現在我已經創造了PHP的MySQL查詢和跨變量傳遞SQL調用中是這樣的:MySQL將變量傳遞給動態查詢

$myparam = $_GET["id_tbl"]; 

mysql_select_db($database_camerich, $camerich); 
$query_rs_table = sprintf("SELECT * FROM table_tbl WHERE idimg_tbl = ".$myparam." ORDER BY order_tbl "; 
$rs_table = mysql_query($query_rs_table, $camerich) or die(mysql_error()); 
$row_rs_table = mysql_fetch_assoc($rs_table); 
$totalRows_rs_table = mysql_num_rows($rs_table); 

我已經成功地將服務器作爲table_view(沒有過濾器)上創建這裏面我是能夠恢復正常。

mysql_select_db($database_camerich, $camerich); 
    $query_rs_table = sprintf("SELECT * FROM table_view"; 
    $rs_table = mysql_query($query_rs_table, $camerich) or die(mysql_error()); 
    $row_rs_table = mysql_fetch_assoc($rs_table); 
    $totalRows_rs_table = mysql_num_rows($rs_table); 

我可以篩選這樣的:

$query_rs_table = sprintf("SELECT * FROM table_view WHERE idimg_tbl = ".$myparam.""; 

我想知道如何建立動態地在服務器上的查詢過濾器,而不是查詢濾波後的結果在PHP返回。

我希望這是有道理的。

感謝

+2

不回答你的問題,但你的腳本由[SQL注入]弱勢(http://stackoverflow.com/questions/568995/best-way-to-defend-against-mysql-injection-and - 跨站腳本) - 您需要修復該問題 – 2010-10-13 10:29:59

+0

而且,您是不是已經過濾查詢?我不知道我明白你想要做什麼 – 2010-10-13 10:30:30

+0

感謝您的佩卡,這不是我使用的實際代碼,只是舉一個例子,我可以用php過濾查詢,但我想要sql服務器來過濾將其數據發回給clent。 但我不知道如何將值傳遞給MySQL,所以它知道過濾 – 2010-10-13 10:44:36

回答

1

這裏是我希望你會爲了試試以下幾種:

  1. 切換到使用PDO爲你的數據庫訪問 - PDO是一個更現代的數據庫訪問接口,它是面向對象。它也支持準備好的語句。 - http://www.php.net/manual/en/book.pdo.php
  2. 將您的視圖切換到存儲過程。 MySQL視圖不帶參數。視圖也有其他限制,如下所示:http://dev.mysql.com/doc/refman/5.1/en/create-view.html。存儲過程接受參數,並且可以通過PDO被稱爲:http://php.net/manual/en/pdo.prepared-statements.php
  3. 這一切都這樣說,你應該評估,如果你真的需要的存儲過程。
+0

感謝那個wilmoore,我會讀pdo,目前我只是想學習存儲過程,以及它們是如何工作的,所以我的箱子裏有另一個工具!我猜存儲過程可能最適合更新插入記錄,而不是獲取過濾數據,因爲調用視圖然後通過php過濾它並不是什麼大問題。 – 2010-10-14 09:08:13