我正在拉下我的头发,关于下面这个脚本。不管我做什么都不会保存发送给它的数据。我已经设置了许多不同方式的脚本,并且如下所示进行了测试。
我设置了将它发送到脚本的部分,如$ pid = 6 $ emailmsg = 1等....并且它有效。这对我没有任何意义。我已经使用了相同的脚本,但在这个程序中至少有十几次var,没有问题。
这就是我发送到脚本
的数据print_r($_POST);
[emailmsg] => 1 [emailrt] => 2 [pid] => 6 [$emrtid] => 48 [$emmsid] => 46
这是不会将数据发送到数据库的脚本之一
$stmt = $db->prepare("UPDATE options SET pid = ?,emailmsg = ? WHERE id = ?");
echo $stmt->execute(array($_POST['pid'],$_POST['emailmsg'],$_POST['emmsid']));
$stmt = $db->prepare("UPDATE options SET pid = ?, emailrt = ? WHERE id = ?");
$stmt->execute(array($_POST['pid'],$_POST['emailrt'],$_POST['emrtid']));
我也试过这个
$sql = "UPDATE options SET
pid = ?,
emailmsg = ?
WHERE id = ?";
$stmt = $db->prepare($sql);
$stmt->bindValue('1', $_POST['pid'], PDO::PARAM_INT);
$stmt->bindValue('2', $_POST['emailmsg'], PDO::PARAM_STR);
$stmt->bindValue('3', $_POST['emmsid'], PDO::PARAM_INT);
$stmt->execute();
$sql = "UPDATE options SET
pid = ?,
emailrt = ?
WHERE id = ?";
$stmt = $db->prepare($sql);
$stmt->bindValue('1', $_POST['pid'], PDO::PARAM_INT);
$stmt->bindValue('2', $_POST['emailrt'], PDO::PARAM_STR);
$stmt->bindValue('3', $_POST['emrtid'], PDO::PARAM_INT);
$stmt->execute();
答案 0 :(得分:1)
如果您真的将print_r
输出复制到了您的问题中,则问题是您的WHERE
条件永远不会得到满足,因此不会更新任何行。
此:
echo $stmt->execute(array($_POST['pid'],$_POST['emailmsg'],$_POST['emmsid']));
应该是:
echo $stmt->execute(array($_POST['pid'],$_POST['emailmsg'],$_POST['$emmsid']));
// ^ that's what it looks like in your print_r
这同样适用于您的第二个查询中的$_POST['emrtid']
:$_POST['$emrtid']
。
答案 1 :(得分:0)
尝试使用命名参数:
$stmt = $db->prepare("UPDATE options SET pid = :pid, emailrt = :emailrt WHERE id = :emrtid");
$stmt->execute(array('pid'=>$_POST['pid'],
'emailrt'=>$_POST['emailrt'],
'emrtid'=>$_POST['emrtid']
));