使用PHP printf生成sql查询

时间:2014-09-18 09:52:08

标签: php mysql sql printf

我尝试生成一个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的版本有什么问题?

5 个答案:

答案 0 :(得分:3)

您正在寻找sprintf,因为您希望存储查询字符串供以后使用。

答案 1 :(得分:1)

我建议您使用PDO。 PDO已命名参数(外观here),可以满足您的需求(加上它可以进行转义和清理)

答案 2 :(得分:0)

而不是printf()使用sprintf()

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

答案 3 :(得分:0)

这里使用了sprintf,因为

sprintf具有原始printf的所有格式化功能,这意味着您可以做的不仅仅是在字符串中插入变量值。

例如,指定数字格式(十六进制,十进制,八进制),小数位数,填充等。 Google for printf,你会发现很多例子。有关printf的维基百科文章应该可以帮助您入门。

答案 4 :(得分:0)

不能将“null”视为数据库中的空值吗?

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

可能是错误的......