2017-04-21 149 views
0

當我使用PHP中的變量構建查詢字符串時,它似乎沒有工作。我當前的查詢是: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})"; 

這也沒有效果。

+2

使用準備語句來代替 –

+1

這實在是一般的差的方法,你應該使用**準備語句**。但是,請嘗試將**引號**添加到查詢中。像''INSERT INTO用戶(用戶名,密碼)VALUES('{$ u}','{$ hash}')「;' – FirstOne

+0

請確保密碼欄至少爲60個字符,否則您將遇到問題試圖驗證密碼。 –

回答

1

最好的解決方案是使用prepared statements ,這很簡單。

這裏是你將如何與預處理語句

的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 Connection PDO Tutorials Mysqli Prepared

注:AS周杰倫在他的評論中已經指出確保您的密碼字段 大小在數據庫中至少60個字符

在您的查詢問題是你沒有將字符串包裝在報價中

你的查詢s應該是:

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

但是這不是推薦quires的最佳方法,你應該使用上面使用預處理語句的方法之一。

這就是爲什麼你應該: Bobby Tables

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

不要忘了包串用引號

但正如評論所說,它的壞主意,直接把數據,利用準備好的語句