我在使用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/