2010-07-25 105 views
-1

我不想繼續重複相同的選擇查詢,所以我寫了這個函數。但它不工作:爲什麼不是這個簡單的功能工作?

function select($what, $table) { 
    $query = mysql_query("SELECT $what FROM $table"); 
} 
select(*, products); 
+0

做您嘗試使用mysql_error()FUNC? – 2010-07-25 04:32:36

+1

這是一個SQL注入噩夢。 – 2010-07-25 04:45:40

+0

@Bill Karwin我總是用mysql_real_escape_string來清理我的輸入我只是沒有寫在這裏:) – Georgy 2010-07-25 04:48:24

回答

4
  1. 您需要將您的參數括在引號中。
  2. 之後應該返回查詢指針。
  3. 您應該引用 - 轉義值以避免SQL注入。
 
function select($what, $table) { 
    $what = mysql_real_escape_string($what); 
    $table = mysql_real_escape_string($table); 
    return mysql_query("SELECT '$what' FROM `$table`;"); 
} 
$query = select('*', 'products'); 

爲了調試:

 
function select($what, $table) { 
    $what = mysql_real_escape_string($what); 
    $table = mysql_real_escape_string($table); 
    $query = mysql_query("SELECT '$what' FROM `$table`;") or die(mysql_error()); 
    return $query; 
} 
$query = select('*', 'products'); 
+0

我完全複製了你的代碼,它仍然不能正常工作,出現此錯誤: Warning:mysql_fetch_assoc()期望參數1是資源,在第22行的C:\ xampp \ htdocs \ shopping_cart \ product.php中給出的布爾值 – Georgy 2010-07-25 04:38:28

+0

這是因爲'mysql_query()'正在返回'false'。 – 2010-07-25 04:39:52

+0

請用mysql_real_escape_string替換addslashes。另請參閱文檔addslashes http://php.net/manual/en/function.addslashes.php -1從我這裏直到你解決這個問題... – 2010-07-25 04:43:53

2

你需要返回$查詢

function select($what, $table) { 
    return $query = mysql_query("SELECT $what FROM $table"); 
} 
$query = select(*, products); 

然後$查詢將有你的查詢結果,您會再使用mysql_fetch_xxx或任何對結果源。

0

你的參數應該是字符串(即select('*', 'products')

0

也許是因爲函數結束後$查詢被丟棄?我沒有與SQL太多的經驗,但是這會更好看我說:

function select($what, $table) { 
    return mysql_query("SELECT $what FROM $table"); 
} 
select("*", "products"); 

哦,「*」和「產品」必須是字符串。

1

你應該做的是:

function select($what, $table) { 
    return mysql_query("SELECT $what FROM `$table`"); 
} 
$query = select('*', 'products'); 
相關問題