簡體   English   中英

PHP / mysql:是否正在將(SELECT,{resource})更改為({resource},SELECT),將mysql_ *轉換為mysqli_ *的可行臨時補丁?

[英]PHP/mysql: Is changing (SELECT, {resource}) to ({resource}, SELECT) a viable temporary patch for mysql_* to mysqli_*?

在首先檢查mysql *()和mysqli *()函數系列在應用方面的差異時,在我看來

$seta = mysql_query("SELECT * FROM table WHERE field = $Filter", $database);

可以快速替換為:

$seta = mysqli_query($database, "SELECT * FROM table WHERE field = $Filter");

同樣,似乎

IF ($A = mysql_fetch_array($seta)) {
    do {
    //code here
    } while ($A = mysql_fetch_array($seta));
}

可以替換為:

IF ($A = mysqli_fetch_array($seta)) {
    do {
    //code here
    } while ($A = mysqli_fetch_array($seta));
}

可以按照我期望的方式工作嗎? 因為它在mysqli *()之前工作了?

請注意 :我不是問我是否應該這樣做,只要我做到這一點。 我完全知道,將創可貼打在一條斷腿上是沒有用的……也就是說,在准備三月份的演示之前,我沒有太多的編碼/測試時間。

是的,我知道這是易受攻擊的代碼。 沒有保障,我不會投產。 我也意識到我並沒有以這種方式使用mysqli *()系列函數的全部功能。

我的目標是在沒有這么長的時間緊縮的情況下正確地重構所有內容(是的,我知道,程序員的最后一句話很著名)。 我只需要運行修補程序的代碼即可運行Demo,然后可以將其停用。

我寄希望於有了一個可以運行的原型,無論是在現場還是在服務器上,我都在不斷旋轉,以證明對軟件更新的需求。我將能夠將PHP v4.x拋在腦后。

項目:
PHP / MySQL更好的用戶搜索

還檢查了:
如何從mysql *升級到mysqli *?
PHP從mysql *遷移到mysqli
上面的標題被刪去了下划線以防止格式化

快速且骯臟的方法(着重於dirty )是通過將mysql_query轉換為mysqli_query等來實現的。 問題是mysql_query使用起來確實很笨拙,因此保留編碼風格不會幫助清理任何內容。

盡管我強烈建議切換到PDO,但它是一個更靈活,功能更強大的數據庫層,如果您要使用mysqlibind_param使用參數化查詢bind_param將用戶數據添加到查詢中。 這解決了絕大多數SQL注入錯誤 我還建議您使用面向對象的界面,這樣您的更新代碼就顯而易見了。 單身i的區別很容易被忽略,而且它的冗長程度通常較低。

換句話說,您替換的代碼如下所示:

$stmt = $database->prepare("SELECT * FROM table WHERE field=?");
$stmt->bind_param('s', $filter);
$res = $stmt->execute();

如果您受此約束,則應該捕獲所有SQL錯誤。

由於命名參數的緣故,PDO更好:

$stmt = $database->prepare("SELECT * FROM table WHERE field=:filter");
$res = $stmt->execute(array('filter' => $filter));

從長遠來看,這通常意味着更少的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM