2013-09-22 30 views
0

我已經在網站上搜索了答案,但找不到任何有關我的特定問題的答案。 我有兩個文件,第一個是我的index.php當然,第二個是我的functions.php文件,它明顯包含了函數,我做了這個函數:創建函數以從SQL中檢索信息

function sql_get($ lang,$ tabler ,$划船){

if ($lang == "heb") { 
    $result = mysql_query("SELECT * FROM %s WHERE id = 0", 
     mysql_real_escape_string($tabler)); 
    $row = mysql_fetch_array($result); 
    return $row['$rower']; 
} 

else if ($lang == "rus") { 
    $result = mysql_query("SELECT * FROM %s WHERE id = 0", 
     mysql_real_escape_string($tabler)); 
    $row = mysql_fetch_array($result); 
    return $row['$rower']; 
} 

這個代碼應該得到關於語言的信息(來自get,它得到它,它是所有罰款與),在SQL表,從該表中的特定行,其中id爲0.

並從插入的行返回信息。

我的警告和錯誤時,語言是 「希伯來書」:

Warning: mysql_query() expects parameter 2 to be resource, string given in /home/elenbyin/public_html/elenby.co.il/vadim/functions.php on line 16 

Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in /home/elenbyin/public_html/elenby.co.il/vadim/functions.php on line 17 

當語言是 「RUS」:

Warning: mysql_query() expects parameter 2 to be resource, string given in /home/elenbyin/public_html/elenby.co.il/vadim/functions.php on line 23 

警告:mysql_fetch_array()預計參數1是資源,null在第24行給出的/home/elenbyin/public_html/elenby.co.il/vadim/functions.php中爲空

index.php文件中的函數調用如下所示:

我會感謝那些會盡力幫助的人,特別是那些會幫助我的人。

非常感謝!

+0

**規則1 **:您不使用['mysql_'](http://php.net/mysql)函數 - 它們已被棄用。您可以使用['mysqli_'](http://php.net/mysqli)或['PDO'](http://php.net/pdo) –

+1

您是否注意到您正在做同樣的事情'if'和'else'子句? – alfasin

+0

是的,我注意到了,它會被改變後,我會得到它的工作方式 –

回答

0

首先,你沒有連接到你的函數內的數據庫。如果你在某個地方打開了你的數據庫,那麼你可以用mysql來解決這個問題,但你不應該這樣做。

其次,你傳遞你的變量作爲第二個參數mysql_query(),但mysql_query()預期的查詢是完全作爲第一個參數,第二個參數應該是連接資源THT連接到數據庫,你的避風港沒有了。

從查詢結構看起來您打算使用sprintf()來創建它。

這應該創建查詢你,假設你已經運行結束一個DATABSE連接:

$query = sprintf("SELECT * FROM %s WHERE id = 0", 
    mysql_real_escape_string($tabler)); 
$result = mysql_query($query) or die(mysql_error()); 

注:mysql已被棄用。你不應該使用它。改爲使用mysqliPDO。如果您使用mysqli,則需要更嚴格地傳入數據庫連接。

+1

如果我可能會問,爲什麼sprintf? – Loko

+0

OP的原始查詢格式包含一個'printf()'佔位符('%s'),所以我使用'sprintf()'創建查詢。還有很多其他的方法可以做到這一點,但'sprintf()'是一個創建查詢的便捷方式,它有許多參數需要轉義或其他預處理。在這種情況下,它確實是矯枉過正。 – 2013-09-22 18:35:52

+0

無論我的代碼是什麼,它仍然保持相同的錯誤: 警告:mysql_result()期望參數1爲資源,布爾在/home/elenbyin/public_html/elenby.co.il/vadim/tryout.php在線中給出14 –

0

正如Amal建議的 - 最好不要使用mysql_ *函數不僅導致它們不被使用,而且容易受到sql注入的影響。

這就是說,爲了解決你的代碼,你應該做的:

$table = mysql_real_escape_string($tabler); 
$sql = "SELECT * FROM $table WHERE id = 0"; 
$link=mysql_connect('host','user','pass'); 
$result = mysql_query($sql, $link); 
... 

爲的mysql_query的第二個(可選)參數應該是一個resource - 不是字符串!

+0

我不認爲「select * from $ table where id = 0」,mysql_real_escape_string(tabler)是錯誤的。 :http://nl1.php.net/manual/en/function.mysql-query.php – Loko

+0

@koko檢查函數的簽名(從發佈的鏈接):'resource mysql_query(string $ query [,resource $ link_identifier = NULL])'second(可選)參數應該是一個資源,而不是一個字符串。如果你不相信我在答案中寫的那個,你可以通過谷歌搜索更多的例子;) – alfasin

+0

是的,我會做更多的研究,我只是想知道。 – Loko