该脚本不会将数据保存到mysql

时间:2014-04-24 19:24:50

标签: php mysql pdo

我正在拉下我的头发,关于下面这个脚本。不管我做什么都不会保存发送给它的数据。我已经设置了许多不同方式的脚本,并且如下所示进行了测试。

我设置了将它发送到脚本的部分,如$ 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();

2 个答案:

答案 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']
));