我在使用INT字段时遇到问题。问题是,当我在屏幕上打印该值时可以,但是更新数据库寄存器时,它又增加了一个。

$today = date('Y-m-d H:i:s');
$query = "SELECT id_ad, ad_printed FROM ads WHERE (ad_type = \"990x90\" OR (ad_type = \"728x90\" OR ad_type = \"250x90\")) AND ad_date_start <= \"$today\" AND ad_date_finish >= \"$today\"";
$result = mysqli_query($link, $query);
while ($row = mysqli_fetch_array($result)) {
    $new_value = $row['ad_printed'] + 1;
    $curr_id = $row['id_ad'];
    $query_upd = "UPDATE ads SET ad_printed = '".$new_value."' WHERE id_ad = '".$curr_id."' LIMIT 1;";
    $upd = mysqli_query($link, $query_upd);
}


有人知道会发生什么吗?
即如果原始值为26,则新值必须为27。$new_value为27,但它注册为28 ... :(

最佳答案

如果您想在sql中增加值,请不要将列值用引号引起来,否则sql将列值作为字符串处理。请确保您的列类型正确,例如integer而不是varchar

UPDATE ads SET ad_printed = (ad_printed + 1) WHERE id_ad = '".$curr_id."' LIMIT 1;


//编辑

如果将变量直接传递到sql,请查看mysqli_real_escape_string函数以防止sql注入。

http://de2.php.net/manual/de/mysqli.real-escape-string.php

关于php - sql将一个添加到字段值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25427731/

10-14 13:57
查看更多