我試圖用PHP創建一個SQL查詢,在這個查詢中它檢查一行是否已經使用相同的日期和用戶名提交/設置。如果它沒有插入一個新行。如果它找到匹配項,它會更新行。使用PHP PDO的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');
}
}
請注意您的SELECT語句;你直接輸入兩個unsanitized變量。我也準備這個聲明。 –