代码之家  ›  专栏  ›  技术社区  ›  Paddy Hallihan

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

  •  0
  • Paddy Hallihan  · 技术社区  · 7 年前

    我试图在数据库中插入带有逗号的值,但逗号正在拆分查询,以便逗号之前的字符串部分进入正确的列,而逗号之后的位进入下一个,之后查询中的每个项都被替换到下一个列中。

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

    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 回复  |  直到 5 年前
        1
  •  1
  •   Funk Forty Niner    7 年前

    请在运行插入之前尝试转义输入。 mysqli_real_escape_string() 应该有办法

    Check this entry 在PHP手册中供参考