preg#u split处理';使用php的姓氏
我正在将每个学生的带有标记的文本文件导入我的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行的“,”,“,”,“,”,“,”,“,”,”,“,” 用于拆分文件的代码为: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服务器版本对应的手册
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