Intereting Posts
Доступ к URL-адресам по адресу www.example.com/page вместо www.example.com/page.php php session_start с включенными файлами Однажды загрузка liks в php? Наличие безопасности в API-системе | PHP cuRL установка обложки альбома mp3 с php Я хочу получить идентификатор пользователя в контроллере laravel 5.3 с Auth :: user () -> id, но он создает ошибку Как я могу завершить реализацию Objective-C декартовой функции продукта? Продолжить заполнение формы HTML после закрытия и повторного открытия Выбор строк, где поле имеет нулевое значение, используя подготовленные инструкции PHP PDO и MySQL Написание приложения для чата Одна форма, одна кнопка отправки, но ДВА действия Как усечь строку в PHP до предложения, ближайшего к определенному числу символов? Ошибка PHP Parse: синтаксическая ошибка, неожиданный T_OBJECT_OPERATOR Почему я не могу получить свойство объекта, который я получаю из PHP? Yii – Управление переменной sesssion

Оптимизация локальной базы данных WebSQL

Я пытаюсь оптимизировать скорость, которую моя локальная база данных заполняет в разрабатываемом веб-приложении. В настоящее время он использует PHP для доступа к базе данных и затем вставляет эти данные в локальную базу данных с помощью Javascript.

Проблема в том, что что-то большее, чем пара записей замедляет его, и я уверен, что это потому, что он выполняет отдельный SQL-запрос для КАЖДОЙ строки. Я читал транзакции (Commits and Rollbacks, а что нет), и это похоже на ответ, но я не совсем уверен, как его реализовать или даже где.

Вот пример одной из функций, загружающих определенную таблицу.

function ploadcostcodes() { $IPAddress = ''; $User = ''; $Password = ''; $Database = ''; $Company = ''; $No=''; $Name=''; ploadSQLConnection($IPAddress,$User,$Password,$Database,$Company); 

// Это соединение с фактической базой данных, откуда поступает информация.

 $Login = 'XXXXXXX'; $conn=mssql_connect($IPAddress,$Login,$Password); if (!$conn ) { die( print_r('Unable to connect to server', true)); } mssql_select_db($Database, $conn); $indent=" "; $sql="SELECT Cost_Code_No as No, Description as Name, Unit_of_Measure FROM v_md_allowed_user_cost_codes WHERE Company_No = " . $Company . " and User_No = '" . $User . "'"; $rs=mssql_query($sql); if (!$rs) { exit("No Data Found"); } while ($row = mssql_fetch_array($rs)) { $No = addslashes($row['No']); $Name = addslashes($row['Name']); $Name = str_replace("'",'`',$Name); $Unit = addslashes($row['Unit_of_Measure']); //THIS IS WHERE I SEE THE PROBLEM echo $indent."exeSQL(\"INSERT INTO Cost_Codes (Cost_Code_No,Name,Unit_of_Measure) VALUES('".$No."','".$Name."','".$Unit."')\",\"Loading Cost Codes...\"); \r\n"; } mssql_free_result($rs); mssql_close($conn); return 0; } 

Я не знаю, что нужно для транзакции (или даже если это то, что нужно сделать). Существует MSSQL для доступа к данным, SQLite для вставки его и Javascript, который запускает PHP-код.

Я бы подготовил запрос с заполнителями, а затем выполнил его для каждой строки с правильными аргументами. Что-то вроде этого (только JS-часть, используя underscore.js для помощников массива):

 db.transaction(function(tx) { var q = 'INSERT INTO Cost_Codes (Cost_Code_No, Name, Unit_Of_Measure) VALUES (?, ?, ?)'; _(rows).each(function(row) { tx.executeSql(q, [row.code, row.name, row.unit]); }); }); 

Изменить: запрос с заполнителями имеет два основных преимущества:

  1. Это делает намного проще для механизма БД кэшировать и повторно использовать планы запросов (потому что вы используете один и тот же запрос в сто раз вместо ста разных запросов один раз).
  2. Это ускользает от данных и позволяет избежать инъекций SQL намного проще.