0

次の SQL クエリがあります。

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

MySQL ワークベンチを介してこのクエリを実行すると、正常に実行されます。

ただし、Webサイト/ 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 の新しいパラメーター化されたバージョン:

$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();
    }
4

1 に答える 1