|
Грамотная работа с препейред стейтмент
|
|||
---|---|---|---|
#18+
Использую данный mysqli класс для работы с БД https://github.com/joshcam/PHP-MySQLi-Database-Class#running-raw-sql-queries. Иногда появляется необходимость писать джойн с таблицей из другой базы. Для выполнения запросов используется конструкция типа "$db->rawQuery", где $db - параметры подключения к БД (среди эти параметров указана дефолт база). Так вот, если мне необходимо выполнить запрос в котором используется друга база, возникает вопрос, как же передать имя базы в конструкцию? Вот пример: "$db->rawQuery('select a.name from name a, another_db.age b where a.id=b.id and b.age=?', Array (99))". Использование another_db в самом запросе является небезопасным. Подскажите как решить это, если здесь можно что-то подсказать :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2016, 17:41 |
|
Грамотная работа с препейред стейтмент
|
|||
---|---|---|---|
#18+
Имена полей вида `database_1`.`table_1`.`field_1` должны работать. Аналогично и с именами таблиц. Нужно только, чтобы пользователь имел доступ на обе базы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2016, 19:13 |
|
Грамотная работа с препейред стейтмент
|
|||
---|---|---|---|
#18+
Может я что-то не понял или не так выразился, но я не хочу использовать конструкцию типа "$db->rawQuery('select a.name from name a, another_db.age b where a.id=b.id and b.age=?', Array (99))", в которой база "another_db" для второй таблицы указана в явном виде. Для первой таблицы база подставляется из свойств $db и она не указана в конструкции запроса. Не знаю, может это выглядит странно, но что-то мне подсказывает, что не правильно указывать имя базы в самом запросе. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2016, 20:20 |
|
Грамотная работа с препейред стейтмент
|
|||
---|---|---|---|
#18+
andrey10что-то мне подсказывает, что не правильно указывать имя базы в самом запросе.Авторы документации считают иначе :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2016, 20:27 |
|
Грамотная работа с препейред стейтмент
|
|||
---|---|---|---|
#18+
Хм. Значит, при инициализации соединения дефолтная база (new mysqli("localhost", "my_user", "my_password", "db" );) указывается просто так, для удобства, а не в целях безопасности? То есть вот такой запрос "$mysqli->query("select name from db_name.table_name")", где не используется дефолтная база, считается нормальным? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2016, 20:49 |
|
|
start [/forum/topic.php?fid=23&msg=39345178&tid=1460862]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 151ms |
0 / 0 |