0

每当我尝试使用以下代码更新表单时,更新都会静默,标题字段中的 0 值和内容字段中的先前值。有人可以帮忙吗!!!

管理类.php

更新功能

 if( $form_title && $form_content ){
       $sql = "UPDATE home_page
       SET title = '{$form_title}' AND content = '{$form_content}' WHERE id = {$id}";
       echo $sql;
       $result = $this->mysqli->query( $sql );
       if(!$result){
         echo 'Error'. mysqli_error();
         return;
       }else{
         $this->success_message = "Update Successfull";
         return;
       }
    }

admin.php 查看页面

if( isset( $_POST['update'] ) ){
   $admin_obj->update($_POST, $id);
}
4

1 回答 1

3

MySQL 默默地转换您的UPDATE语句并执行布尔运算。服务器读取更新语句为

UPDATE home_page
SET title = ('{$form_title}' AND (content = '{$form_content}')) 
WHERE id = {$id} 

您要做的是替换ANDinto,以使其工作。

UPDATE home_page
SET title = '{$form_title}', content = '{$form_content}'
WHERE id = {$id} 

作为旁注,SQL Injection如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-03-24T14:35:24.227 回答