Выполнение динамических запросов на php с помощью pdo в файле *.sql с параметрами / переменными

#php #mysql #sql #pdo #prepared-statement

#php #mysql — сервер #sql #pdo #подготовленное заявление #mysql

Вопрос:

В моем проекте я использую множество запросов pdo, особенно подготовленную инструкцию, из-за того, что мои файлы выглядят так плохо. Чтобы очистить мои файлы, я бы выполнил sql-файл в who was write my prepared statement и где-нибудь мои переменные и получил бы мои результирующие данные.

Это для prod Windows Server с PHP 7.2 (у меня включены mysqli и pdo_mysql), Apache 2.4. Я попытался выполнить sql-файл, все нормально, но idk, как это работает с подготовленным оператором и его переменными / bind, и действительно ли это возможно в php.

 [php]
//1 - execute a normal sql file (no prepared)

function executeSqlFile($filesql){
$req = file_get_contents($filesql);
Sql($req);
}

//2 -  my try to execute a prepared sql file

function executeSqlPreparedFile($filesql) {
  $query = file_get_contents($filesql);
  $array = explode("n", $query);
  $b = true;
  for ($i=0; $i < count($array) ; $i  ) {
    $str = $array[$i];
      if ($str != '') {
        $str .= ';';
        $b amp;= mysql_query($str);  
      }  
  }

return $b;
}
  

Для последующего кода, содержащегося в query.sql:

 SELECT 
race1.start_time, 
race1.finish_time, 
race1.penalty, 
race1.result_time, 
competitors.number, 
competitors.name, 
competitors.firstname, 
competitors.club_abrev 
    FROM race1 
        INNER JOIN competitors 
            ON race1.number = competitors.number 
WHERE  competitors.ishere = 1 
AND competitors.isfinish = 1
AND competitors.categorie_number = $categorie_number
    ORDER BY competitors.sex, 
    competitors.categorie_number, 
    race1.result_time ASC
  

Я бы использовал что-нибудь вроде =>

 execute(PATH/query.sql, array(
'categorie_number' => $categorie_key,
'bind_parameter' => $value_during_the_execution)
)
  

Комментарии:

1. Почему бы и нет, возможно, отличная идея. Но в чем вопрос?

2. Итак, str_replace звучит просто. Хотя похоже, что ваш код не допускает многострочных запросов.

3. @miken32 Как я могу разрешить многострочные запросы? Я знал, что могу написать этот запрос онлайн, но я бы использовал sql.file для выполнения запроса с привязкой для большей эргономичности. PS: Прошу прощения за мой английский, это не мой родной язык.