php错误插入包含值的数据,包括添加符号(+)到数据库

时间:2016-04-18 13:32:47

标签: php mysql pdo

在MySQL数据库中插入“3 + 1个房间”或更新描述区域为“3 + 1个房间”时出错。

我看到MySQL日志中没有添加符号“+”(数据库中插入的数据)

UPDATE testtable set status='0',title='3   1 room',
description='3 1 Daire. 1 Balkon kapalı.' WHERE id='60';

create table testtable ( id int(11), status tinyint(4), title varchar(20), 
description text) ENGINE=InnoDB DEFAULT CHARSET=utf8 

php文件

$baglanti=new PDO("mysql:host="localhost";dbname="test";charset=utf8",$us
ername,$passwd) or die("error");
$val=$baglanti->exec("UPDATE testtable set status='0',title='$title',
    description='$dest' WHERE ad_no='$ad_no' ");
return $val;

我该怎么办?

修改

update.php

<?php
        include("database.php");

        $fields = array();
        $values=array();
        $fvalue=$_POST['id'];

        $table=$_POST['table'];
        foreach ($_POST as $key => $value) {

                if( $key!='table' && $key!='id' && $key!='alan'){
                        if( strpos($key,"date")){
                                $datet=new DateTime($value);
                                $value=$datet->format('Y-m-d');
                        }
                        array_push($fields,$key);
                        array_push($values,$value);
                }
        }
        $alan=$_POST['alan'];

$ID=Updt($table,$fields,$values,$alan,$fvalue);

        if($ID!=0){

                echo $ID;
        }
?>

database.php中

<?php 
     $baglanti=new PDO("mysql:host="localhost";dbname="test";charset=utf8",$us
ername,$passwd) or die("error"); 
#UPDATE
function Updt($table,$set,$value,$field,$fvalue){
        $bag=$GLOBALS['baglanti'];
        $sts='';
        if(is_array($set)){
                for ($i=0; $i < count($set); $i++) {
                        $sts.=$set[$i]."='".$value[$i]."',";
                }
                $sts=rtrim($sts,",");
        }else{
                $sts=$set."='".$value."'";
        }
        $val=$bag->exec("UPDATE $table set $sts WHERE $field='$fvalue'");

        return $val;
}

?>

这一个,程序员编写代码。我尝试从所有代码中提取问题部分。文件中有很多代码。

1 个答案:

答案 0 :(得分:0)

我的猜测是你没有生成你认为的查询。

这应该允许您查看查询。

我还添加了一些错误检查,确实应该在此代码中使用。

我修改了连接线,因为我确定$username变量中间的换行符会导致错误。

database.php中

<?php 
    try {
        $baglanti = new PDO("mysql:host=localhost;dbname=test;charset=utf8",
                             $username,$passwd);
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
        exit;
    }

#UPDATE
function Updt($table,$set,$value,$field,$fvalue){
    $bag = $GLOBALS['baglanti'];
    $sts='';
    if(is_array($set)){
        for ($i=0; $i < count($set); $i++) {
            $sts.=$set[$i]."='".$value[$i]."',";
        }
        $sts=rtrim($sts,",");
    }else{
        $sts=$set."='".$value."'";
    }

    $sql = "UPDATE $table set $sts WHERE $field='$fvalue'";
    echo $sql;      // you can comment this line out when you are sure the SQL is good

    $val = $bag->exec($sql);

    return $val;
}
?>

update.php

这里的小修正只是让你知道实际从函数返回的是计数而不是行ID。它也可能是FALSE,表示查询中的Updt()函数发生错误。

<?php
    include("database.php");

    $fields = array();
    $values=array();
    $fvalue=$_POST['id'];

    $table=$_POST['table'];
    foreach ($_POST as $key => $value) {

            if( $key!='table' && $key!='id' && $key!='alan'){
                    if( strpos($key,"date")){
                            $datet=new DateTime($value);
                            $value=$datet->format('Y-m-d');
                    }
                    array_push($fields,$key);
                    array_push($values,$value);
            }
    }
    $alan=$_POST['alan'];

    //$ID=Updt($table,$fields,$values,$alan,$fvalue);
    // this is not an ID it is a coumt of the number or rows
    // updated by the Updt() function

    $cnt = Updt($table,$fields,$values,$alan,$fvalue);

    if ( $cnt === FALSE ) {
        // then we had an error in Updt()
        print_r($baglanti->errorInfo(), true);
        exit;
    }

    if($cnt != 0){
        echo 'Rows updated = ' . $cnt;
    }
?>
  

如果我不这样做,我必须提到其他人。您的代码向SQL Injection开放,您应该使用预准备语句。也许你应该向你提到的程序员提一下。也许你也不应该假设他们所写的一切都是正确的。