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));

您在插入语句中正确,但在更新中没有正确。

不知道你从哪里得到$notes

另外不确定它是否是故意的,但您没有在更新查询中更新 var4。

于 2013-01-18T19:06:12.183 回答