我遇到sprintf()
的问题,使用它将一个mysql查询存储到var中以便以后使用它。
告知,我正在使用adodb库进行数据库相关操作。
例如$value=25.5
和$id=5
,我有类似
$value = number_format($baseValue, 2, ".", "");
$query = sprintf("Insert into table_name (id, value) values (%d, $.02f)", $id, $value);
$db->Execute($query);
之前有一个条件决定在此之前是否还有另一个$查询。如果第一个查询没有运行,那么这个查询
运行正常Insert into table_name (id, value) values (5, 25.50)
但如果第一个查询运行,那么我在这个查询上会出错,因为查询结果为
Insert into table_name (id, value) values (5, 25,50)
我试图在$value
之前打印sprintf()
并且它仍然具有正确的格式,为什么发生这种情况以及如何解决?
修改:直到此时才使用或更改$ value
答案 0 :(得分:1)
你基本上做了两次字符串转换的等效数字,首先是number_format()
,然后是printf()
和%f
修饰符。用$.02f
替换%s
就足够了。
printf()
未生成有效的英文格式编号的原因是因为它使用了区域设置(有关详细信息,请参阅setlocale())。鉴于SQL期望固定格式,使用number_format()
更可靠。
更新: ADOdb library似乎支持准备好的状态。它们通常比将值注入SQL代码更简单,更健壮:
$rs = $DB->Execute("select * from table where key=?",array($key));
while (!$rs->EOF) {
print_r($rs->fields);
$rs->MoveNext();
}
答案 1 :(得分:0)
在您的值周围添加一些单引号。 25,50
将被解释为两个字段,一开始(我非常确定mySQL不会像25.50那样没有引号。
$query = sprintf("Insert into table_name (id, value) values ('%d', '$.02f')", $id, $value);
将导致:
Insert into table_name (id, value) values ('5', '25.50')