0

PHP を使用して、同じ日付とユーザー名を使用して行が既に送信/設定されているかどうかを確認する SQL クエリを作成しようとしています。そうでない場合は、新しい行が挿入されます。一致が見つかった場合は、代わりに行を更新します。

新しい行を正常に挿入できますが、既存の日付と名前を使用すると、どのログにもエラーが表示されず、クエリは問題なく実行されているように見えます。しかし、データベースをチェックすると、行に実際に設定された UPDATES がないことに気付きました。SQL で更新コマンドを手動で実行すると、正常に動作しているように見えます。

続行するログ/エラー データがないため、ここでアドバイスを得たいと思っていました。私はここで何かが欠けているに違いないと確信しています。これは私が現在使用しているものです:

require_once 'db-conn.php';

$name = $_POST['name'];
$email = $_POST['email'];
$date = $_POST['date'];
$var1 = $_POST['var1'];
$var2 = $_POST['var2'];
$var3 = $_POST['var3'];
$var4 = $_POST['var4'];

$conn = db_connect (); 
$sqlq = "SELECT * FROM tbl WHERE date = '$date' AND name = '$name'"; 
$nRows = $conn->query("$sqlq")->fetchColumn();

if ($nRows==0) {
try {
  $sqli = "INSERT INTO tbl (name,email,date,var1,var2,var3,var4) VALUES (:name,:email,:date,:var1,:var2,:var3,:var4)";
   $sql = $conn->prepare("$sqli");
   $sql->execute(array(':name' => $name, ':email' => $email, ':date' => $date, ':var1' => $var1, ':var2' => $var2, ':var3' => $var3 ':var4' => $var4));
 } catch(PDOException $e) {
   die ('SQL Error');
   }
 }
else {
 try {
  $sqli = "UPDATE tbl SET email='$email', notes='$notes', var1='$var1', var2='$var2', var3='$var3' WHERE date='$date' AND name='$name'";
  $sql = $conn->prepare("$sqli");
  $sql->execute(array($name, $email, $date, $var1, $var2, $var3, $var4));
} catch(PDOException $e) {
  die ('SQL Error');
}

}

4

1 に答える 1

4

バインドされた変数が正しくありません:

$sqli = "UPDATE tbl SET email=:email, notes=:notes, var1=:var1, var2=:var2, var3=:var3 WHERE date=:date AND name=:name";
$sql = $conn->prepare("$sqli");
$sql->execute(array(':name' => $name, ':email' => $email, ':date' => $date, ':var1' => $var1, ':var2' => $var2, ':var3' => $var3, ':notes'=>$notes));

Insertステートメントでは修正しましたが、更新では修正しませんでした。

あなたがどこ$notesから来ているのかわからない。

さらに、意図的なものかどうかはわかりませんが、更新クエリで var4 を更新していません。

于 2013-01-18T19:06:12.183 に答える