PHP / SQL-将带有逗号(,)的值插入数据库

时间:2018-08-23 13:41:36

标签: php mysql sql

我正在尝试将带有逗号的值插入数据库,但是逗号正在拆分查询,以便逗号前的字符串部分进入正确的列,而逗号后的部分进入下一个和每个之后,查询中的项目将移至下一列。

我与数据库的连接文件如下:

define('DB_HOST', 'localhost');
define('DB_NAME', '********');
define('DB_USER', '********');
define('DB_PASS', '********');
define('DB_CHAR', 'utf8');

class DB
{
    protected static $instance = null;
    protected function __construct() {}
    protected function __clone() {}

    public static function instance(){
        if (self::$instance === null){
            $opt  = array(
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
                PDO::ATTR_EMULATE_PREPARES => FALSE,
            );
            $dsn = 'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset='.DB_CHAR;
            self::$instance = new PDO($dsn, DB_USER, DB_PASS, $opt);
        }
        return self::$instance;
    }

    public static function __callStatic($method, $args){
        return call_user_func_array(array(self::instance(), $method), $args);
    }

    public static function run($sql, $args = []){
        if (!$args){
            return self::instance()->query($sql);
        }
        $stmt = self::instance()->prepare($sql);
        $stmt->execute($args);
        return $stmt;
    }
}

然后我这样查询:

$item1 = 'item1';
$item2 = 'item_with_a_,_symbol';
$item3 = 'item3';

$params = [$item1,$item2,$item3];
$sql = "INSERT INTO table (col1,col2,col3) VALUES(?,?,?)";
$stmt = DB::run($sql,$params);

在这种情况下,我的数据库将如下所示:

col1            col2            col3
item1           item_with_a_    _symbol

解决此问题的最佳方法是什么?任何帮助或建议,将不胜感激。

1 个答案:

答案 0 :(得分:1)

在运行插入之前尝试转义输入。 mysqli_real_escape_string()应该可以解决问题

PHP手册中的

Check this entry供参考