printf или аналог внутри запроса SQL? - PullRequest
1 голос
/ 01 сентября 2011

Я видел похожий вопрос, но ответов пока нет.

У меня следующий запрос SQL:

$sql = mysql_query("SELECT * FROM patient_db_0004 WHERE MATCH ( Name, id_number ) AGAINST ('$term' IN BOOLEAN MODE);");

где Patient_DB_0004 - это я хочу напечатать индекс автоинкремента, например, "0001,0002,0003,0004" внутри моего SQL-запроса.

printf("%04s",$i);

Для печати значений внутри запроса.

Ответы [ 2 ]

2 голосов
/ 01 сентября 2011

В MySQL вы можете использовать строковые функции .В качестве примера вы можете попробовать LPAD

SELECT LPAD(`id`, 4, '0') FROM patient_db_0004

Вы можете искать похожие функции для вашего механизма базы данных.

Пример вывода:

mysql> SELECT LPAD(`id` , 4, '0') FROM `patient_db_0004` LIMIT 10;
+---------------------+
| LPAD(`id` , 4, '0') |
+---------------------+
| 0001                |
| 0002                |
| 0003                |
| 0004                |
| 0005                |
| 0006                |
| 0007                |
| 0008                |
| 0009                |
| 0010                |
+---------------------+
10 rows in set (0.00 sec)

(у меня есть поле auto_increment с именем id в приведенном выше примере)

Редактировать: на основе вашего комментария, похоже ответ Винсента - это то, что вы ищете:

<?php
$term = 'foobar';
for($i=1; $i<5; $i++)
{
    echo(sprintf("SELECT * FROM patient_db_%04d WHERE MATCH (Name, id_number) AGAINST ('$term' IN BOOLEAN MODE);\n", $i));
}
?>

Дали мне:

SELECT * FROM patient_db_0001 WHERE MATCH (Name, id_number) AGAINST ('foobar' IN BOOLEAN MODE);
SELECT * FROM patient_db_0002 WHERE MATCH (Name, id_number) AGAINST ('foobar' IN BOOLEAN MODE);
SELECT * FROM patient_db_0003 WHERE MATCH (Name, id_number) AGAINST ('foobar' IN BOOLEAN MODE);
SELECT * FROM patient_db_0004 WHERE MATCH (Name, id_number) AGAINST ('foobar' IN BOOLEAN MODE);

Если я правильно понимаю, вы пытаетесь выполнить эти запросы.Итак, что вы можете сделать здесь:

<?php
// ...
for($i=1; $i<5; $i++)
{
    $query = sprintf("SELECT * FROM patient_db_%04d WHERE MATCH (Name, id_number) AGAINST ('$term' IN BOOLEAN MODE);\n", $i);
    $sql = mysql_query();
}
?>
1 голос
/ 01 сентября 2011

Вы хотите использовать sprintf вместо printf (который печатает значение в строку):

$query = sprintf("SELECT foo FROM bar WHERE baz = '%s'", "hi");
$sql = mysql_query($query);

Однако имейте в виду, что это не препятствует внедрению SQL-кода. Вы все еще должны использовать mysql_real_escape_string для предоставленных пользователем данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...