簡體   English   中英

我應該如何使用mysql_query?

[英]How should I use mysql_query?

在下一個代碼中,此函數存在一些問題:

if(!($_SESSION['autenticado']))
    if($_POST["user"] && $_POST["pass"])
    {
        $user=$_POST["user"];
        $con=mysql_connect("localhost","root","3270");

            mysql_select_db("futbol",$con);
            $query = "SELECT us_pass FROM user WHERE us_nom = '$user'";
            print_r($query);
            mysql_real_escape_string($query);
            mysql_query($query)or die mysql_error();
            //print_r($pas);
            //$_SESSION["autenticado"]=1;
     }

我在用它嗎?

您需要在需要轉義的字符串而不是整個查詢上調用mysql_real_escape_string

$user = mysql_real_escape_string($user);
$query = "SELECT us_pass FROM user WHERE us_nom = '$user'";

附錄:如果您只是在探索PHP的數據庫集成,我敦促您看一下PDO ,它是處理數據庫操作的更為復雜和安全的方式。


還要注意,您實際上並沒有使用mysql_query做任何事情。 這將返回一個資源,您可以將其用於獲取信息。 例如,要獲取返回的密碼,請使用以下命令:

$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result)) {
    $password = $row['us_pass'];
}

要回答您的問題,您使用的是錯誤的,您只想對輸入而不是整個查詢調用轉義函數:

$user = mysql_real_escape_string($user);

也就是說,不建議使用mysql_*函數,您應該使用PDOMySQLi 這是使用PDO更好的方法的示例:

$con = new PDO('mysql:dbname=futbol;host=127.0.0.1', 'root', '3270');
$stmt = $con->prepare('SELECT us_pass FROM user WHERE us_nom = :user');
$stmt->execute(array('user' => $user));
$result = $stmt->fetchAll();

mysql_real_escape_string在插入到SQL查詢之前應該轉義$user ,然后直接傳遞給mysql_query 這樣做的目的是避免$_POST['user']中帶有撇號,否則可能導致查詢混亂(因為您的用戶值已經被它們包圍了)。

例如,如果$_POST['user']joe'bob作為值,則您的查詢將變為:

SELECT us_pass FROM user WHERE us_nom = 'joe'bob'

然后,您可以查看流浪撇號如何提出問題。

相反,請嘗試以下操作:

if(!($_SESSION['autenticado']))
  if($_POST["user"] && $_POST["pass"])
  {
    $con=mysql_connect("localhost","root","3270");
    $user=mysql_real_escape_string($_POST["user"]); // escape your value here (and move below connection)

    mysql_select_db("futbol",$con);
    $query = "SELECT us_pass FROM user WHERE us_nom = '$user'";
    print_r($query);
    mysql_query($query) or die mysql_error();
    //print_r($pas);
    //$_SESSION["autenticado"]=1;

    // here you would mysql_fetch_array/result/etc. and get what
    // was returned from the database
 }

根據您對其他答案的評論:您正在使用POST發送表單,而不是GET對嗎?

你沒有看到任何東西,唯一的原因是你的if沒有得到滿足的條件下,連接到你的PHP數據庫或一個錯誤的問題(有錯誤抑制); 該腳本未到達您的print_r語句。

我不確定,但是您可能還想在第一個if語句中使用{}並稍微清理一下代碼:我建議使用isset()而不是僅將字符串輸入if語句。

並檢查您的錯誤日志。

暫無
暫無

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

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