2014-09-18 2 views
0

Я пытался произвести запрос с printf быть выполнен на MySQL:Использование PHP Printf для создания SQL запросов

$query = printf("INSERT INTO author VALUES (null,'%s','%s','%s',null,null,null,null,null)", 
    $command['pseudonym'],$command['name'],$command['surname']); 
$result = $connection->query($query); 

Но результат эта странная ошибка:

INSERT INTO author VALUES (null,'pseudo','nome','cognome',null,null,null,null,null) 
Database access failed: You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near '83' at line 1 

Полученный запрос отлично в PhpMyadmin. Я попробовал также версию кода без printf и он работает:

$pseudo = $command['pseudonym']; 
$name = $command['name']; 
$surname = $command['surname']; 
$query = "INSERT INTO author VALUES (null,'$pseudo','$name','$surname',null,null,null,null,null)"; 

Что случилось с версией с помощью printf?

+0

Вы смотрите в руководстве, где вы видите это: 'PRINTF: Возвращает длину выводимого string.' Вы можете использовать Sprintf. Тем не менее, вы не только подвержены SQL-инъекциям, но и код уродливый. Вы используете PDO? –

ответ

3

Вы ищете sprintf, так как вы хотите сохранить строку запроса для последующего использования.

+0

О мой Бог! Это так неловко. Я использую PHP с нескольких дней, поэтому я не знал о двух версиях printf и sprintf: S –

0

Вместо printf() использование sprintf():

$query = sprintf("INSERT INTO author VALUES (null,'%s','%s','%s',null,null,null,null,null)", 
    $command['pseudonym'],$command['name'],$command['surname']); 
0

Sprintf используется здесь, потому что

Sprintf имеет все возможности форматирования исходного Printf, что означает, что вы можете сделать гораздо больше, чем просто вставив значения переменных в строках.

Например, укажите формат номера (шестнадцатеричный, десятичный, восьмеричный), количество десятичных знаков, отступ и многое другое. Google для printf, и вы найдете множество примеров. Статья в wikipedia на printf должна начать вас.

1

Предлагаю вам использовать PDO. PDO назвал параметры (посмотрите here), который делает то, что вам нужно (плюс он заботится об эвакуации и дезинфекции)

+0

Я использую PHP с нескольких дней, и я изучил его по очень простой книге: Изучение PHP, MySQL, JavaScript, CSS & HTML5 3rd Edition Робин Никсон. Он не упоминал о PDO. Я обязательно посмотрю. спасибо –

0

Не должно быть «null» должно быть «видимым как пустое значение в базе данных?

$query = sprintf("INSERT INTO author VALUES ('','%s','%s','%s','','','','','')", 
$command['pseudonym'],$command['name'],$command['surname']); 

может быть неправильно ... конечно