Google Cloud SQL
ограничивает использование LOAD DATA INFILE
в операторах SQL.
Я пытаюсь создать функцию, которая позволит пользователям загружать пользовательские данные в мое веб-приложение, чтобы им не приходилось вносить каждую запись по одному.
Как бы я мог сделать это в рамках ограничений GAE PHP
а также Cloud SQL
?
Обновление: пользователи моего приложения могут управлять списком студентов. Я хочу, чтобы мои пользователи могли отправлять файлы CSV и вносить эти данные в базу данных своих студентов. Я не могу использовать синхронизацию или MySQL, и т. Д. Это должно быть сделано в веб-приложении.
Спасибо за ваш вклад!
Я тоже недавно искал способ для опытных пользователей для массовой загрузки. Моя первая успешная попытка была специфичной для переменной, поэтому проверьте мое отображение. Эта пробная версия была завершена без внешнего интерфейса, поэтому вам нужно будет создать форму для пользователей, чтобы загрузить ее в свое ведро. Мой ответ предполагает знакомство с Google Storage.
<?php
$databasehost = ":/cloudsql/something:here"; //Name of your CLOUD SQL INSTANCE ID
$databasename = "db";
$databaseusername ="insert_usr";
$databasepassword = "pwd";
$csv = "gs://APPID.appspot.com/csv_uploads/bulk.csv"; //APPID is the specific name of your app, followed by other bucket(s), if any, and the filename.csv
$column0 = ''; //insert the name of your columns as appeared in MySQL
$column1 = '';
$column2 = '';
$column3 = '';
$column4 = '';
$column5 = '';
$column6 = '';
$column7 = '';
$column8 = '';
$column9 = '';
$column10 = '';
$column11 = '';
$con = @mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error()); //Don't remember why I added '@' might be error
@mysql_select_db($databasename) or die(mysql_error());
$csv_file = $csv; // Name of your CSV file
$csvfile = fopen($csv_file, 'r');
$theData = fgets($csvfile);
$i = 0;
while (!feof($csvfile)) {
$csv_data[] = fgets($csvfile);
$csv_array = explode(",", $csv_data[$i]);
$insert_csv = array();
$insert_csv[$column0] = $csv_array[0]; //array[#] correspondes to columns in order
$insert_csv[$column1] = $csv_array[1];
$insert_csv[$column2] = $csv_array[2];
$insert_csv[$column3] = $csv_array[3];
$insert_csv[$column4] = $csv_array[4];
$insert_csv[$column5] = $csv_array[5];
$insert_csv[$column6] = $csv_array[6];
$insert_csv[$column7] = $csv_array[7];
$insert_csv[$column8] = $csv_array[8];
$insert_csv[$column9] = $csv_array[9];
$insert_csv[$column10] = $csv_array[10];
$insert_csv[$column11] = $csv_array[11];
$query = "INSERT INTO TABLENAME(".$column1.",".$column1.",".$column2.",".$column3.",".$column4.",".$column5.",".$column6.",".$column7.",".$column7.",".$column9.",".$column10.",".$column11.",)
VALUES('".$insert_csv[$column0]."','".$insert_csv[$column1]."','".$insert_csv[$column2]."','".$insert_csv[$column3]."','".$insert_csv[$column4]."','".$insert_csv[$column5]."','".$insert_csv[$column6]."','".$insert_csv[$column7]."','".$insert_csv[$column8]."','".$insert_csv[$column9]."','".$insert_csv[$column10]."','".$insert_csv[$column11]."')";
$n=mysql_query($query, $con );
$i++;
}
fclose($csvfile);
echo "File data successfully imported to database!!";
mysql_close($con);
?>
В моем испытании строки со специальными символами (одинарные и двойные кавычки и дефисы, которые я могу вспомнить) не импортировали, поэтому обратите внимание на ваш row_count ().
Я думаю, что единственный способ сделать это — создать скрипт PHP для чтения файла и вставки его в базу данных с использованием SQL. INSERT
операторы, нормальный способ, которым вы вставляете данные в экземпляр cloudSQL.