mysql — PHP: выполнить оператор mysql_query, содержащий строку, но строка содержит строку, заданную во включаемом файле, который вызывается до того, как строка установлена

У меня есть файл PHP, включенный в первую строку моего основного сценария PHP, как это:

// Include obfusctated MySQL queries
include "../../secure_storage/mysql_queries.php";

// $user_id stores the cookie as a variable. The cookie contains the user ID
$user_id = $_COOKIE['storerun_user_id'];

// Query the database to get the user's account information
$account_query = mysql_query($account_query_sql);

Включенный файл PHP содержит следующую строку кода:

$account_query_sql = "SELECT `first_name`, `last_name`, `email`, `password`, `referral_link`, `street_address`, `floor_apartment_number`, `notes`, `ecocash_number` FROM `users` WHERE `user_id` = '$user_id'";

Причина в том, что я запутываю запросы SQL и помещаю их в каталог, удаленный от корня на сервере.

Проблема заключается в том, что включаемый файл содержит SQL-запрос, содержащий $ user_id, но строка задается только после включения файла. Любые идеи о том, как использовать мои настройки и быть в состоянии запустить mysql_query? Я весь день пытался понять это в моей голове. Конечно, есть способ сделать это.

0

Решение

Дак, я бы не стал беспокоиться о том, чтобы скрыть твои SQL-запросы. Однако, если вы действительно хотите это сделать, можно добавить оператор замены строки непосредственно перед оператором базы данных запросов и отредактировать включенный файл, чтобы использовать ‘search_item’, например:

str_replace('search_item', $user_id, $account_query_sql);

и включенный файл будет определять $ account_query_sql, как показано ниже.

$account_query_sql = "SELECT `first_name`, `last_name`, `email`, `password`, `referral_link`, `street_address`, `floor_apartment_number`, `notes`, `ecocash_number` FROM `users` WHERE `user_id` = 'search_item'";
-2

Другие решения

Просто измените порядок вашего кода:

$user_id = $_COOKIE['storerun_user_id'];

include "../../secure_storage/mysql_queries.php";

PHP не может путешествовать во времени, поэтому ваш код должен выполнять шаги в соответствующем порядке — создать переменные ДО Вы пытаетесь использовать их, а не после.

И обратите внимание, что вы уязвимы для SQL инъекций.

1

По вопросам рекламы [email protected]