Я пытался создать запрос с printf
выполняться на MySQL:
$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
?
Ты ищешь sprintf
так как вы хотите сохранить строку запроса для последующего использования.
Я предлагаю вам использовать PDO. PDO назвал параметры (смотрите Вот) что делает то, что вам нужно (плюс он заботится о побеге и дезинфекции)
Вместо printf()
использование Sprintf ():
$query = sprintf("INSERT INTO author VALUES (null,'%s','%s','%s',null,null,null,null,null)",
$command['pseudonym'],$command['name'],$command['surname']);
Спринтф используется здесь, потому что
sprintf обладает всеми возможностями форматирования исходного printf, что означает, что вы можете сделать гораздо больше, чем просто вставлять значения переменных в строки.
Например, укажите числовой формат (шестнадцатеричный, десятичный, восьмеричный), количество десятичных знаков, отступы и многое другое. Google для printf, и вы найдете множество примеров. Статья в Википедии о printf должна помочь вам начать.
Разве «null» не должен быть «», чтобы рассматриваться как пустое значение в базе данных?
$query = sprintf("INSERT INTO author VALUES ('','%s','%s','%s','','','','','')",
$command['pseudonym'],$command['name'],$command['surname']);
может быть неправильно конечно …