小编use*_*177的帖子

MySQL不会以零作为值更新

用户检索他们的产品列表,并在一个页面上显示此列表,其中文本框预先填充了数量.用户可以更改这些数量,然后表单将此数据发送到更新页面.我使用以下语句来执行数据库更新..

$sql  = "UPDATE reservations SET quantity=? WHERE tableID= ?";
Run Code Online (Sandbox Code Playgroud)

这适用于任何值,除非用户在文本框中放置零,然后更新只是跳过此值并将其保留在现有值.我已经直接进入数据库并且可以手动将值更改为零而没有任何问题,但它似乎只是基于Web的语句不起作用.它被设置为INT,我也尝试了VARCHAR,但也没有运气.知道什么会导致sql语句忽略零(0)值?

完整的更新代码是

$opt = array(
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$conn = new PDO($dsn, $username, $password, $opt);
$sql  = "UPDATE reservations SET quantity=? WHERE tableID= ?";
$stmt = $conn->prepare($sql);
foreach($_POST["Quantity"] as $id => $quantity) {
    if ($quantity) $stmt->execute(array($quantity, $id));
}
Run Code Online (Sandbox Code Playgroud)

php mysql

1
推荐指数
1
解决办法
675
查看次数

用于更新多行的PDO循环

我有一个表单,用于检索多行数据,每个项目都有一个textarea,供用户对特定项目进行评论.返回的项目数是可变的,它们不必在任何/所有框中留下注释.

    <textarea name="comment[]" cols="25" rows="2"><?php echo $f2; ?></textarea>
    <input name="tableid[]" type="hidden" value="<?php echo $f1; ?>">
Run Code Online (Sandbox Code Playgroud)

echo语句使用当前存储在数据库中的任何内容填充文本区域,因为用户可以修改其他人输入的内容.

当它传递给表单处理页面时,它返回此..

    Submit: Submit
    comment: Test Comment 1,Test Comment 2
    tableid: 590,591
Run Code Online (Sandbox Code Playgroud)

所以它似乎正确地传递了数组.我正在使用此代码更新数据库

$conn = new PDO("mysql:host=xxxx;dbname=xxxxx",$username,$password);

$i = 0;
if(isset($_POST['submit'])) {
    foreach($_POST['comment'] as $comment) {
                        $comment = $_POST['comment'][$i];

            $id = $_POST['tableid'][$i];
            $stmt = $conn->prepare("UPDATE reservations SET comment=:comment WHERE     tableid=:id");

            $stmt->bindValue(':comment', $comment, PDO::PARAM_INT);
            $stmt->bindValue(':id', $id, PDO::PARAM_INT);

            $stmt->execute();

            $i++;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这似乎根本没有更新,我哪里错了?

非常感谢

php mysql pdo

0
推荐指数
1
解决办法
9713
查看次数

标签 统计

mysql ×2

php ×2

pdo ×1