Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
preg#u split处理';使用php的姓氏_Php_Mysql_Delimiter_Preg Split - Fatal编程技术网

preg#u split处理';使用php的姓氏

preg#u split处理';使用php的姓氏,php,mysql,delimiter,preg-split,Php,Mysql,Delimiter,Preg Split,我正在将每个学生的带有标记的文本文件导入我的MySQL数据库。我使用preg_split来阅读每一行,并将信息分解为单独的数据,除了姓氏包含[']的学生(如O'Neil)外,这些数据都有效 错误:插入学生资料(学生ID、学生编号、术语ID、, 课程编号、课程名称、商店代码、等级、百分比)值 ('13269 3100876170吉米·奥尼尔12 2701 MT11数学11 Q1 74 '、''、''、''、''、''、''、'')您的SQL语法有错误;检查 右边是与MySQL服务器版本对应的手册

我正在将每个学生的带有标记的文本文件导入我的MySQL数据库。我使用preg_split来阅读每一行,并将信息分解为单独的数据,除了姓氏包含[']的学生(如O'Neil)外,这些数据都有效

错误:插入学生资料(学生ID、学生编号、术语ID、, 课程编号、课程名称、商店代码、等级、百分比)值 ('13269 3100876170吉米·奥尼尔12 2701 MT11数学11 Q1 74 '、''、''、''、''、''、''、'')您的SQL语法有错误;检查 右边是与MySQL服务器版本对应的手册 使用Neil 12 2701 MT11数学11 Q1 74的语法 第231093行的“,”,“,”,“,”,“,”,“,”,”,“,”

用于拆分文件的代码为:

 ini_set("auto_detect_line_endings", true);

  $file = fopen($target_file,"r");

 while(! feof($file))
  {
 $test= fgets($file);

 $array = preg_split('/\s"+/', $test);
fclose($file);
}

我猜问题在于('/\s“+/',$test)代码的一部分。我已经查找了关于正在发生的事情的清晰文档,其中大部分是有意义的,但我找不到如何包含所有空格,但将“排除”用作分隔符。

不要对分隔数据使用正则表达式。使用解析器,在这种情况下,您可以使用:

  • 名称中的
    CSV
    是默认值,您可以定义分隔符。在您的情况下,空格是分隔符,双引号用于封装。这将使您达到一半。一旦正确地分解了此数据,您应该使用参数化查询,以便您的mysql驱动程序根据需要转义数据

    使用
    str\u getcsv
    的示例:

    $string = '"13269" "3100876170" "Jimmy O\'Neil" "12" "2701" "MT11" "MATHEMATICS" "11" "Q1" "74" "74"';
    $data = str_getcsv($string, ' ', '"');
    print_r($data);
    
    演示:

    参数化查询:

    INSERT INTO student_data (studentID, student_number, termID, course_number, course_name, storecode, grade, percent) VALUES (?, ?, ?, ?, ?, ?, ?, ?) 
    

    然后,如果使用PDO,您可以将
    $data
    直接传递到
    execute
    函数。

    这与
    preg_split()无关
    :您遇到sql注入问题,应该切换到准备好的语句:您可以在问题上发布文件数据的示例吗?只需一行,如带有“如果可能的话,请输入字符。您好,这是没有”的示例数据“.13143 3101139339 Ethan Webb 10 2701 CD10职业发展10 Q1 94