簡體   English   中英

准備好的聲明和mysqli_query在同一頁面上

[英]Prepared statement & mysqli_query on same page

我正在使用mysqli准備好的語句

$email=$_POST['email'];
$password=$_POST['password'];


$sql="SELECT * from users where email=? and password=?";
$result=$db->prepare($sql);
$result->bind_param('ss',$email,$password);
$result->execute();

由於post值來自用戶我遵循這個方法但是對於例如..我想從所有用戶那里獲取數據庫中的東西

SELECT * from users where active=1
  1. 我應該在這里使用預備語句還是簡單的$ db-> query(// code); 會沒事的?
  2. 我不應該在同一頁面中混合簡單的mysqli查詢和預處理語句嗎?
  • 我應該在這里使用預備語句還是簡單的$ db-> query(// code); 會沒事的?

如果查詢是靜態的(沒有動態變量),就像你寫的那樣,你可以使用簡單的mysqli::query

  • 我不應該在同一頁面中混合簡單的mysqli查詢和預處理語句嗎?

我假設你在單個.php文件中的“在同一頁面”中; 那樣做完全沒有問題。 記住PHP解析器會將所有php腳本(當你包含/ require ...)附加在一起,然后解析它們。

你是否混合兩者真的是一個偏好的問題。 在這種情況下,我會說它並沒有真正發揮那么大的作用。

准備語句與普通查詢之間存在性能差異。 您的第一個查詢作為查詢會更慢(假設您通過mysqli_real_escape_string運行輸入,這必須與數據庫服務器通信)。 但是,由於第二個沒有輸入,因此將其作為預處理語句會將執行分解為准備和執行,並產生一些開銷。 當它是一個查詢時,你只執行一次不從你的腳本外部輸入, query更快,邊緣(我懷疑你的速度需求是如此,它確實有所作為)。

我確實想知道你為什么要獲得所有活躍的用戶,而不是過濾掉你想要的那個,但是沒有足夠的信息說這不是你應該做的。 如果您最終只是循環遍歷這些結果並抓住您感興趣的幾個,那么最好將此標准放在WHERE子句中。

盡可能使用預准備語句是一種很好的做法。 如果您的應用程序將增長,並且您將不得不用用戶輸入替換硬編碼變量,該怎么辦?

實際上,為此使用ORM更好,因為它允許您在需要時重用已准備好的查詢。 即使你沒有使用它們,ORM也會鼓勵你寫這樣的方法:

getActiveUsers()

而不是每次都寫入查詢。

有關更多信息,請閱讀有關SOLID原則和DRY規則的信息。

暫無
暫無

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

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