简体   繁体   English

使用PHP PDO的SQL查询

[英]SQL Query using PHP PDO

I'm trying to create a SQL query using PHP in which it checks to see if a row has already been submitted/set using the same date and user name. 我正在尝试使用PHP创建一个SQL查询,在该查询中检查是否已使用相同的日期和用户名提交/设置了一行。 If it hasn't it inserts a new row. 如果尚未插入,则插入新行。 If it does find a match, it updates the row instead. 如果找到匹配项,它将更新该行。

I can insert a new row fine, but when I use a pre-existing date and name, I receive no error in any of my logs, and the query appears to run without any problems. 我可以插入一个新行,但是当我使用预先存在的日期和名称时,我的任何日志都没有收到错误,并且查询运行似乎没有任何问题。 But when checking the database, I notice that there are no UPDATES actually set to the row. 但是在检查数据库时,我注意到实际上没有为该行设置任何UPDATES。 When I run the update command manually in SQL, it appears to work fine. 当我在SQL中手动运行update命令时,它似乎可以正常工作。

Having no logs/error data to go on, I was hoping to get some advice here. 由于没有日志/错误数据,我希望在这里获得一些建议。 I'm sure there must be something I'm missing here. 我确定这里一定有我想念的东西。 This is what I'm currently using: 这是我目前正在使用的:

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

} }

You don't have the bound variables correct: 您没有正确的绑定变量:

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

You did it correct in the Insert statement but not in the update. 您在Insert语句中正确执行了此操作,但在更新中未正确执行。

Not sure where you are getting $notes from though. 不确定从哪里获得$notes

Plus not sure if it is intentional or not but you are not updating var4 in the update query. 加上不确定是否是有意的,但是您没有在更新查询中更新var4。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM