PHP переменные и запрос - PullRequest
3 голосов
/ 23 марта 2012

Я немного запутался с этим: могу ли я использовать переменные PHP в запросе pg?

$conn = pg_pconnect("...");
$a = 1
$b = array ("....")
$c = array ("....")
$d = array ("....")
$i = $a
$ct = "CREATE TABLE $a
(
$b[$i] bigint,
$c[$i] bigint,
$d[$i] bigint
)";

pg_query($conn, $ct);

$result = pg_query($conn, $ct);
if ($result) {$a = $a++}

Сможет ли это создать 10 таблиц, если я выполню этот цикл 10 раз?Спасибо!

Ответы [ 5 ]

1 голос
/ 23 марта 2012

Если вы хотите подготовить ваши строки, чтобы они были подходящими идентификаторами для PostgreSQL (смешанный регистр? Зарезервированные слова?) И защиты от внедрения SQL одновременно, добавьте pg_escape_identifier():

$ct = 'CREATE TABLE ' . pg_escape_identifier($a) . '(
' . pg_escape_identifier($b[$i]) . ' bigint,
' . pg_escape_identifier($c[$i]) . ' bigint,
' . pg_escape_identifier($d[$i]) . ' bigint
)';

Если, конечно, ваши идентификаторы уже подготовлены.

1 голос
/ 23 марта 2012

Конечно, вы можете, но вы должны избежать их:

$ct = "CREATE TABLE $a
(
{$b[$i]} bigint,
{$c[$i]} bigint,
{$d[$i]} bigint
)";
0 голосов
/ 23 марта 2012

можно ли использовать переменные PHP в запросе?

Видимо, вы не можете.
SQL-запрос выполняется сервером SQL, который абсолютно ничего не знает о PHP.

Однако вы можете добавить любые числовые переменные в строку PHP . Который можно отправить на сервер SQL. Но, конечно, в нем не будет переменных, а будет просто текст.

Правила синтаксиса PHP-строк объяснены здесь

В целях отладки вы можете использовать большое преимущество строк PHP - возможность распечатывать их.
Просто echo свою строку и посмотрите, что вы получили, и если он выглядит как правильный запрос SQL. Если нет - исправьте код.

0 голосов
/ 23 марта 2012

"можно ли использовать переменные PHP в запросе?"

Да, запрос - это просто строка, которая передается функции. Вы можете выполнять все операции со строками и конкатенацию, которые вы можете выполнять с любой другой переменной, прежде чем передавать ее в функцию.

0 голосов
/ 23 марта 2012

Это будет работать за $ a, но не для массивов.вы должны сделать что-то вроде:

$ct = "CREATE TABLE $a
(".
$b[$i]." bigint,".
$c[$i]." bigint,".
$d[$i]." bigint
)";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...