2012-06-26 39 views
2

下面是我使用的PHP代碼:MYSQL_QUERY不工作

$query="select * from `myTable` where `email`='$email' limit 0,1"; 
    if(empty($conn)) 
    { 
     echo "not connected".PHP_EOL; 
    } 

    $result = mysql_query($query,$conn); 
    $row = mysql_fetch_array($result);  

    if(empty($row)) 
    { 
      .... 

當查詢在phpMyAdmin執行,我獲得選擇單行。

但是,當我在php中執行代碼時,該行始終爲空。

對於我嘗試執行的其他幾個查詢也是如此。 mysql_query總是失敗。

什麼可能是錯的?

+0

你確認'$ email'有價值嗎? –

+2

不轉義數據是非常危險的。使用['mysql_escape_string'](http://hk2.php.net/manual/en/function.mysql-escape-string.php)或['mysqli_real_escape_string'](http://hk2.php.net/manual/ en/mysqli.real-escape-string.php) –

+1

您是否嘗試過在mysql_query上添加一些錯誤檢查? – andrewsi

回答

0

首先確認$email的值。在定義$query之前回應它,確保它是您的想法。

如果你已經這樣做了,那麼你知道這就是問題 - 相反,很可能你的鏈接標識符$conn是問題所在。嘗試將查詢的第二個參數留空,而不是使用鏈接標識符,而是在腳本開始處運行mysql_connect()。這是99.5%的時間做事的最好方式。

請參見:http://php.net/manual/en/function.mysql-connect.php

+0

99.5%的時間絕對不是最好的辦法。看到我對OP問題的評論。 –

+0

我指的是在運行查詢之前進行連接。OP對於MySQL來說顯然是新的,所以在進入諸如PDO或MySQLi之類的更復雜的東西之前,理解基本邏輯可能會更好。 – Nathanael

+0

我不同意。不要教他腐爛的原則。 –

2

我不覺得自己有足夠的代碼,看看是怎麼回事。但是,僅僅基於你向我們展示,你得到$結果並將其分配給$行後,你有一個if語句

if(empty($row)) {...doing something secret...} 

這意味着,如果有什麼東西像你期待什麼都不會發生,因爲該行返回(空($行))將是假的,不執行。

+0

他可能會將其放置在那裏用於測試目的(以確定該行是否確實爲空),但讓我們看看OP說的內容。 –

1

試試這個使用PDO:

<?php 

$email = "[email protected]"; 

try { 
    //Instantiate PDO connection 
    $conn = new PDO("mysql:host=localhost;dbname=db_name", "user", "pass"); 
    //Make PDO errors to throw exceptions, which are easier to handle 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    //Make PDO to not emulate prepares, which adds to security 
    $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

    $query = <<<MySQL 
SELECT * 
    FROM `myTable` 
    WHERE `email`=:email 
    LIMIT 0,1; 
MySQL; 

    //Prepare the statement 
    $stmt = $conn->prepare($query); 
    $stmt->bindParam(":email", $email, PDO::PARAM_STR); 

    $stmt->execute(); 

    //Work with results 
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
     //Do stuff with $row 
    } 
} 
catch (PDOException $e) { 
    //Catch any PDOExceptions errors that were thrown during the operation 
    die("An error has occurred in the database: " . $e->getMessage()); 
} 

使用mysql_*功能是非常氣餒。這是生成破碼的保證。請從我給你的評論中的鏈接學習PDO或MySQLi,然後使用它們。

+0

這絕對不是回答正在問什麼 –

+0

@AlvinWong:不,它給出了一個更好的選擇,用於不應該被寫入的破壞的代碼。請參閱[XY問題](http://meta.stackexchange.com/q/66377/166899) –