这是REPLACE
语法
$sql = "REPLACE INTO 2_1_journal (Number,RecordDay, RecordMonth) VALUES ";
$insertQuery = array();
$insertData = array();
foreach ($_POST['row_id'] as $i => $row_id) {
$insertQuery[] = '(?, ?, ?)';
$insertData[] = $row_id;
$insertData[] = $_POST['date_day'][$i];
$insertData[] = $_POST['date_month'][$i];
}
if (!empty($insertQuery)) {
$sql .= implode(', ', $insertQuery);
$stmt = $db->prepare($sql);
$stmt->execute($insertData);
}
然而,请阅读而不是REPLACE
更好地使用ON DUPLICATE KEY UPDATE
尝试像这样改变
$sql = "INSERT INTO 2_1_journal (Number,RecordDay, RecordMonth) VALUES ON DUPLICATE KEY UPDATE (RecordDay, RecordMonth) ";
$insertQuery = array();
$insertData = array();
foreach ($_POST['row_id'] as $i => $row_id) {
$insertQuery[] = '(?, ?, ?, ?, ?)';
$insertData[] = $row_id;
$insertData[] = $_POST['date_day'][$i];
$insertData[] = $_POST['date_month'][$i];
$insertData[] = $_POST['date_day'][$i];
$insertData[] = $_POST['date_month'][$i];
}
if (!empty($insertQuery)) {
$sql .= implode(', ', $insertQuery);
$stmt = $db->prepare($sql);
$stmt->execute($insertData);
}
但不起作用(既不插入也不更新)
什么是错误的?
如果是downvote,请写下评论为什么(为了避免写下导致downvote的事情)
更新
将代码更改为此
$sql = "INSERT INTO 2_1_journal (Number, RecordDay) VALUES ON DUPLICATE KEY UPDATE RecordDay";
$insertQuery = array();
$insertData = array();
foreach ($_POST['row_id'] as $i => $row_id) {
$insertQuery[] = '(?, ?)';
$insertData[] = $row_id;
$insertData[] = $_POST['date_day'][$i];
}
获取SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以便在第1行的'ON DUPLICATE KEY UPDATE RecordDay('21',''),('22','')附近使用正确的语法
已更改为
$sql = "INSERT INTO 2_1_journal (Number, RecordDay) VALUES ON DUPLICATE KEY UPDATE RecordDay=VALUES(Number)";
$insertQuery = array();
$insertData = array();
foreach ($_POST['row_id'] as $i => $row_id) {
$insertQuery[] = '(?, ?)';
$insertData[] = $row_id;
$insertData[] = $_POST['date_day'][$i];
获取SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以便在第1行的'ON DUPLICATE KEY UPDATE RecordDay = VALUES(Number)('21',''),('22','')'附近使用正确的语法< / p>
将代码更改为此
$sql = "INSERT INTO 2_1_journal (Number, RecordDay) VALUES ON DUPLICATE KEY UPDATE RecordMonth=?";
$insertQuery = array();
$insertData = array();
foreach ($_POST['row_id'] as $i => $row_id) {
$insertQuery[] = '(?, ?, ?)';
$insertData[] = $row_id;
$insertData[] = $_POST['date_day'][$i];
$insertData[] = $_POST['date_month'][$i];
获取SQLSTATE [HY093]:参数号无效:绑定变量数与令牌数不匹配
我可以得出结论,最后一个例子是有效的SQL语法。但为什么错误? Number,RecordDay,RecordMonth =?和$insertQuery[] = '(?, ?, ?)';
3个变量和3个令牌?或者我错了?
如果$insertQuery[] = '(?, ?)';
相同
SQLSTATE [HY093]:参数号无效:绑定变量数与令牌数不匹配
请帮忙。我被困了......不知道
工作代码!!!
try {
$sql = "INSERT INTO 2_1_journal (Number, RecordDay) VALUES ";
$insertQuery = array();
$insertData = array();
foreach ($_POST['row_id'] as $i => $row_id) {
$insertQuery[] = '(?, ?)';
$insertData[] = $row_id;
$insertData[] = $_POST['date_day'][$i];
}
if (!empty($insertQuery)) {
$sql .= implode(', ', $insertQuery) . 'ON DUPLICATE KEY UPDATE RecordDay = VALUES(RecordDay);';
$stmt = $db->prepare($sql);
$stmt->execute($insertData);
}
}
catch (PDOException $e){
echo "DataBase Error: " .$e->getMessage() .'<br>';
}
catch (Exception $e) {
echo "General Error: ".$e->getMessage() .'<br>';
}
请你的评论。并查看ON DUPLICATE KEY UPDATE
!!!
答案 0 :(得分:0)
每当使用代码构建SQL语句时,请添加一行:
echo $sql;
在执行语句之前。通过这种方式,您可以看到实际执行的内容。
然后你可以削减&amp;将SQL语句直接粘贴到数据库中,看看会发生什么。
另外 - 为了防止SQL注入,添加
$row_id = mysql_real_escape_string($POST['row_id']);
$date_day = mysql_real_escape_string($_POST['date_day']);
$date_month = mysql_real_escape_string($_POST['date_month']);
到代码的开头,然后在其余代码中使用$ row_id而不是$ POST ['row_id']。并且$ date_day而不是$ _POST ['date_day']和$ date_month而不是$ _POST ['date_month']等 - 为你的所有POST和GET变量做这个。
检查一下: http://xkcd.com/327/