2013-03-20 43 views
-2

這裏是編輯後的腳本沒有錯誤。並修復了2個修復程序。對於那些幫助過的人,謝謝。提到代碼不清楚或混亂是無關緊要的。鑑於以下大多數是mysql查詢中的常見結構。即使mysql的示例文檔也遵循這種類似的流程。回覆的成員應該從無意義的互聯網嘲笑中否定。它更值得你花時間,我自己也這樣做。那些誰留在話題和協助,我感謝你。使用mysqli_query&mysqli_fetch_row將mysql轉換爲mysqli錯誤的問題

例如:

$行= mysqli_fetch_row(mysqli_query($ CON, 「SELECT test_table.points FROM TEST_TABLE WHERE test_table.key = '」 $鍵。 「'」)); if($ row [0]> 0){//存在

其中$ row將返回非零結果(如果爲true)。否則爲0。幾乎不需要檢查mysqli_fetch_row和/或mysqli_query。由於在簡單中檢查$行工作正常。在普遍存在的條件下,不需要單獨檢查mysqli_fetch_row和/或mysqli_query。它確實提供了存在/不存在的結果。沒有$ result $ row $ query只是$ row。

對正常流程的注意偏差是我希望使用call_user_func。並通過$ _GET進行功能和參數調查。將更多地關注PDO。但是,exec之前的乾淨代碼現在應該可以做好了。執行前要清理哪些內容。

總而言之,代碼正常工作。並且已經寫了更多的來管理mysql數據庫。從寫入,寫入塊,讀取,讀取塊,刪除,刪除塊。

也可根據要求收集編號記錄。例如,假設你有同一個約翰史密斯的6條記錄。您現在可以整理並掃描這些記錄中的差異。無論你想要什麼,不想要,等等。或者如果說你只是想盲目地稱約翰史密斯的這些記錄的前3個。


mysqli_fetch_row & mysqli_fetch_row修復:

FROM調用$ CON之外的功能,然後到按MySQL的。在mysqli中沒有按預期工作。關於$ con的處理方式,函數沒有錯誤。

TO只需添加全局$ con即可調用$ con函數。可能最終會使用$ GLOBALS,即使如此。

結果:調用$ con外部函數,然後在mysql中正常工作。在mysqli中,它需要在函數中設置全局。即全球$ con。或者它失敗。



call_user_func非關鍵錯誤修正:

FROM call_user_func($ FUNC($ _ GET [ '用戶'],$ _ GET [ '鍵'],$ _ GET [」點 '],$ _ GET [' 類型'])); call_user_func($ func,$ _ GET ['user'],$ _ GET ['key'],$ _ GET ['points'],$ _ GET ['type']);}};

結果:兩行都正確執行。 執行非嚴重錯誤。 做同樣的事情,但沒有以下非嚴重錯誤。

兩個

樣本輸出:用戶= MY_NAME;關鍵= 34342 $ ee56i1;點= 1234;類型=


- 爲移除修復代碼解決了問題 -

回答

-1

你的類目前毫無意義,可能會堅持編寫必要的風格代碼,因爲它至少會更乾淨。

此刻,您應該將$ con傳遞給您的MYsql類,以將其本身用作資源,而不是嘗試將其作爲全局變量來訪問它。

您也沒有過濾您的用戶輸入,這是危險的,並可能導致您的網站上的SQL注入攻擊。

我鼓勵你仔細閱讀這兩篇文章,一旦你對它們進行了討論,我還鼓勵你簡單地改用PDO和準備好的語句。這將停止您的代碼當前允許的SQL注入攻擊。

http://net.tutsplus.com/tutorials/php/pdo-vs-mysqli-which-should-you-use/ http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/

+0

類只是毫無意義,因爲你只能看到它的一部分。不要根據分割來判斷它的有效性。堅持顯示什麼。另一個PHP我有處理錯誤檢查,過濾等。然而,我會看PDO。 – Esoterica 2013-03-20 22:29:33

+1

@Dan如果你沒有顯示完整的,自給自足的代碼(如果沒有,明顯地將它標記爲這樣!),那麼不要責怪我觀察這些!我不是一個總是知道何時向我展示完整解決方案的嚮導!我只能對所顯示的內容發表評論。 – Ivo 2013-03-21 00:14:12

0

您使用call_user_func錯讀manutal call_user_func第一個參數是回調 - 在你的情況下,它是你的類中的功能,所以它應該是這樣的: 如果你有一個非在對象-static功能:

class Test{ 
    public function doit($a){ 
     echo($a); 
    } 
} 

$t = new Test(); 

call_user_func(array($t,'doit'),'asfaasfs'); 

和在靜態函數內部對象:

class Test{ 
    public static function doit($a){ 
     echo($a); 
    } 
}  

call_user_func('Test::doit','asfaasfs'); 
+0

改爲:call_user_func($ func,$ _ GET ['user'],$ _ GET ['key'],$ _ GET ['points'],$ _ GET ['type']);它通過$ _GET語句將所有4個需求傳遞給$ func。我所需要做的就是改變(去掉一個)。固定和引用,沒有錯誤。最初的代碼仍然執行,但輕聲抱怨。做這個改變仍然有效,但沒有抱怨。所以這在一定程度上有所幫助。這只是因爲缺乏參考而抱怨。不是因爲它完全錯誤。只是以PHP想要的方式未被引用。 – Esoterica 2013-03-20 21:35:19

+0

儘管call_user_func並不完全正確。它仍然執行沒有打破。並且總是返回結果。我所做的更改仍然是一樣的,但沒有顯示任何更多的非關鍵性錯誤。我希望你會得到幫助的錯誤會是爲什麼$ row在mysqli中嚴重錯誤,但從未在mysql中執行過。而且它錯誤地聲明它希望mysqli_result。以及如何將它傳遞到$行以滿足其需要。 – Esoterica 2013-03-20 21:41:13

+0

部分原因在於爲什麼$ row嚴重錯誤。 $ con在外部函數中注意到mysql從未失敗。要在mysqli中有一個函數以外的$ con,它需要將它注意爲全局的。否則$ con必須在調用函數內部使用。 – Esoterica 2013-03-20 22:19:17

0

你有幾個問題。

  1. $con在課堂外聲明,因此在課堂內部不可用。您需要將它傳遞給類(更好的選項),或將其指定爲全局(快捷+髒選項)。

  2. mysqli_fetch_row(mysqli_query($con,'...'))
    此代碼顯然是直接從舊mysql_xx()的代碼轉換,但它不是很大。

    您忽略了由mysqli_query()返回的任何可能的錯誤情況。這意味着如果失敗,它會通過false進入mysqli_fetch_row()函數,然後該函數將失敗並顯示無意義的錯誤expects parameter 1 to be mysqli_result,而不是實際告訴您錯誤在查詢中是什麼。

    事情是,因爲我上面的第一點,$con沒有設置,mysqli_query()是失敗的,這就是爲什麼你在mysqli_fetch_row()得到錯誤。

    理想情況下,您應該將此代碼分成多行。請自行調用mysqli_query(),然後執行一些錯誤檢查,然後僅在知道查詢實際工作後再調用mysqli_fetch_row()

希望能幫助解釋這裏出現的問題。解決這兩點,你應該很好地把整個事情整理出來。

一旦您擺脫了這些致命錯誤,您還應該花時間處理您的代碼容易受到SQL注入攻擊的問題。您目前正在將您的$_GET變量直接傳遞到查詢字符串中,無需任何干預。這會使你的系統非常脆弱並且容易被破解。您應該考慮使用參數化查詢,這是mysqli庫的一個功能,旨在以安全可靠的方式更輕鬆地處理SQL查詢中的變量。

+0

1.取出這段代碼並刪除類結構。然後在call_user_func中。將MYsql :: $ func更改爲$ func。錯誤不存在類結構。上傳前我忘記刪除它。對不起。 2. mysqli_query和mysqli_fetch_row之前也被拉長了。然後再次檢查他們是否仍然需要mysqli_result。請參閱[鏈接](http:// stackoverflow。com/questions/7707949/get-as-parameters-in-php-)並查看最佳答案 - call_user_func。 – Esoterica 2013-03-20 20:53:24

+0

$ sql =「SELECT test_table.points FROM test_table WHERE test_table.key ='」。 $鍵。 「'」; $ query = mysqli_query($ con,$ sql); $ row = mysqli_fetch_row($ query); 顯示它仍然需要mysqli_result。還沒有想出如何處理。在MySQL中,我從來不需要提交任何比我更多的東西。在mysqli它需要它。 – Esoterica 2013-03-20 21:01:08

+0

將$ con放入寫入函數中進行測試,並將其關閉。現在的代碼就像在mysql中一樣。奇怪的是,mysql從未抱怨$ con在函數之外,然後被調用。該錯誤現在與mysqli_fetch_row或mysqli_query()無關。它一直都是美元。所以現在會尋找方法來保持$ con如何擁有它。功能之外。並稱之爲全球化。奇怪地看着你寫的和我玩的東西都有幫助。那謝謝啦。你能否建議將$ con稱爲全局的好方法?現在在我的腳本中。 – Esoterica 2013-03-20 22:13:32