2013-05-22 111 views
0

我有以下SQL查詢:SQL UPDATE查詢通過MySQL工作臺正確執行而不是通過PHP

UPDATE uploads SET UserName='Test2', UserEmail='Test2', UploadCount='4' 
WHERE Country = 'Algeria' 

當我運行MySQL的通過此查詢工作臺它執行罰款。

我試圖然而,通過網站/ PHP運行它,並在嘗試通過以下方式來執行查詢:

$sql = "UPDATE uploads SET UserName='$user_data[name]', UserEmail='$user_data[email]', UploadCount='$user_data[FilesUploaded]' WHERE Country = '$country'"; 


echo $sql; 
    try 

    { 
    $pdo = new PDO('mysql:host=localhost; dbname=db01', $username, $password); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $stmt = $pdo->prepare($sql); 
    $stmt->execute();  

    # Affected Rows? 
     echo $stmt->rowCount(); // 1 
    } catch(PDOException $e) { 
     echo 'Error: ' . $e->getMessage(); 
    } 

SQL查詢正在通過這裏變量建,但是我複製/將$ sql的回聲粘貼到工作臺中以檢查是否沒有語法錯誤,$ sql的回顯是我上面粘貼的內容。

當我通過web應用程序運行它時,我得到0行受影響,並且未更新UPDATE,我在哪裏出錯?

謝謝

更新:PDO的新版本paramatarized:

$sql = "UPDATE uploads SET "; 

$sql .="UserName = :name, 
     UserEmail = :email, 
     UploadCount = :FilesUploaded"; 

$sql .=" WHERE Country = '$country'"; 

    try  
    { 
    $pdo = new PDO('mysql:host=localhost; dbname=db01', $username, $password); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $stmt = $pdo->prepare($sql); 

    $stmt->bindParam(":name", $user_data['name']); 
    $stmt->bindParam(":email", $user_data['email']); 
    $stmt->bindParam(":FilesUploaded", $user_data['FilesUploaded']); 

    $stmt->execute();  

    # Affected Rows? 
     echo $stmt->rowCount(); // 1 
    } catch(PDOException $e) { 
     echo 'Error: ' . $e->getMessage(); 
    } 
+0

參數值':)' –

+0

對不起,我不明白,你能澄清? :) – Gideon

+1

http://www.php.net/manual/en/pdo.prepared-statements.php –

回答

-1

它看起來像你想從一個數組中插入的信息,而這是在引號。試試這個:

$sql = "UPDATE uploads SET UserName='".$user_data['name']."', UserEmail='".$user_data['email']."', UploadCount='".$user_data['FilesUploaded']."' WHERE Country = '$country'"; 
+0

感謝您的評論,但$ sql變量似乎被定義爲一個有效的SQL查詢,如事實所示,如果我回顯$ sql並在工作臺中運行查詢,它可以正常工作。但是,爲了防止出現這種情況,我實施了您的修改,但它沒有任何區別 – Gideon

+0

請**,請勿**在查詢中嵌入數據。更改報價不是解決方案。 – tadman

+0

您是否完全確定您的數據庫中存在與「阿爾及利亞」國家相關的行? – nullpointerexception