簡體   English   中英

PHP查詢字符串中的變量不起作用

[英]PHP query string with variables in it not working

當我使用PHP中的變量構建查詢字符串時,它似乎不起作用。 我當前的查詢是:

$u = "admin";
$hash = password_hash("password", PASSWORD_DEFAULT);
$set_login = "INSERT INTO users (username, password) VALUES ({$u}, {$hash})";

*我正在腳本中進一步執行查詢

如果我用它表示的字符串文字替換{$u} ,而僅用密碼的字符串文字替換{$hash} ,例如password ,則查詢工作正常。 但是,當我引入變量時,它就會中斷。 我嘗試分解查詢字符串並使用串聯運算符:

$set_login = "INSERT INTO users (username, password) VALUES ( " . $u . ", " . $hash . ")";

這也不起作用。 然后我以為可能是哈希值,所以我將代碼修改為(用於測試):

$u = "admin";
$p = "password";
$set_login = "INSERT INTO users (username, password) VALUES ({$u}, {$p})";

這也不起作用。

最好的解決方案是使用准備好的語句 ,這很簡單。

這是您將如何使用准備好的語句來執行的操作

mysqli

<?php
$u = "admin";
$hash = password_hash("password", PASSWORD_DEFAULT);
$set_login = "INSERT INTO users (username, password) VALUES (?,?)";
$query = $ConnectionString->prepare($set_login);
$query->bind_param("ss",$u,$hash);

if($query){
    echo "success";
}else{

    error_log("error".$ConnectionString->error);
}

?>

PDO

<?php
$u    = "admin";
$hash = password_hash("password", PASSWORD_DEFAULT);

$query = $ConnectionString->prepare("INSERT INTO users (username, password) VALUES (?,?)")->execute(array($u,$hash));

if ($query) {
    echo "success";
} else {

    error_log("error" . $ConnectionString->errorInfo());
}

?>

一些有用的資源。

PDO連接 PDO教程 Mysqli准備

注意:AS Jay在其評論中指出,請確保您數據庫中的密碼字段大小至少為60個字符

在您的查詢中的問題是,您沒有包裝引號周圍的字符串

您的查詢應為:

$set_login = "INSERT INTO admin (uname, upass) VALUES ('{$u}', '{$hash}')";

但這不是建議的最佳執行方式,您應該使用上述方法之一使用預准備語句。

這就是您應該這樣做的原因: 鮑比桌

INSERT INTO users (username, password) VALUES ('{$u}', '{$hash}')

別忘了用引號將字符串引起來

但是正如評論中提到的那樣,直接放置數據,使用准備好的語句是個壞主意

暫無
暫無

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

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