簡體   English   中英

將值解析為mysql查詢

[英]Parse value to a mysql Query

我有一個快速的問題,我已經從表單中獲取了用戶名變量,我需要在查詢中插入它,您能告訴我我要去哪里了嗎,它說:“字段列表”中的“ $ username”列'

這是代碼:

echo $HTTP_POST_VARS['username'];

   echo $username;
   $query = sprintf( 'SELECT $username FROM hostess' );
  1. 在提供的代碼中,您從未設置$username
  2. 您對Sql注入開眼界
  3. 您無緣無故地使用sprintf-它格式化字符串,但不提供任何格式,下面的示例
  4. 您正在嘗試'SELECT $username FROM hostess'那里'SELECT $username FROM hostess'但這根本不是有效的Sql語句。

您會想要更多類似的東西:

$query = sprintf( "SELECT * FROM hostess WHERE username='%s'", $username);

確保您清除$ username之后。

$query = sprintf( 'SELECT %s FROM hostess', $username);

-或,如果這是一個字符串值,我懷疑您可能希望將其包含在查詢文本中的單引號中-

$query = sprintf( "SELECT '%s' FROM hostess", $username);

注意:生成的SQL語句看起來有些奇怪,因為它將為hostess表中的每一行返回相同的文字值。 如果女主人表中有100行,您將返回100個具有相同文字值的行。 這可能就是您想要的,但讓我感到非常奇怪。

注意:sprintf函數在第一個參數中查找%s,%d等占位符,並將其替換為其余參數中的值。)

注意:如果$username包含一個來自表單的值,並且尚未通過驗證,以阻止SQL注入攻擊,我將使用(公認的老派) mysql_real_escape_string函數。 (其他人將為更好,更現代的技術提供建議,以達到相同的結果。)

$query = sprintf("SELECT '%s' FROM hostess",mysql_real_escape_string($username));

在PHP中,對字符串使用單引號不會解析變量的字符串。 使用串聯或雙引號:

$query = sprintf( 'SELECT ' . $username . ' FROM hostess' );
$query = sprintf( "SELECT $username FROM hostess");

當然,這並不意味着使用POST var會帶來可怕的風險。

嗯,一切似乎都錯了。

首先,您從未定義變量$ username。 您正在執行的操作僅在仍支持suberglobals的PHP版本中有效。

其次,為什么要使用sprintf進行查詢?

順便提一下,不建議使用HTTP_POST_VARS。 使用POST

正確的代碼就是這樣。

    $username = $_POST['username'];
echo $username;

$query = mysql_query("SELECT ".$username." FROM hostess");

暫無
暫無

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

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