PHP 整数到小数的转换
PHP Transformation from integer to decimal
我尝试将 php 中值为 0 的整数保存到 miranda 数据库中的 decimal(7,2)。
但是值为0的整数总是保存99999.99
我找不到解决方案。我认为它可以自动转换。
我在 php.
中使用 PDO
除 0 以外的其他值也适用。
我插入的数组:
array(":name"=>"3ld",":urlid"=>($url->id),":date"=>"NOW()",":type"=>"renew",":status"=>($url->alias.$url->custom.".".$url->tld),":price"=>$price)
来自数组的 Var 转储值:
array(6) { [":name"]=> string(3) "3ld" [":urlid"]=> string(1) "1" [":date"]=> string(5) "NOW()" [":type"]=> string(5) "renew" [":status"]=> string(19) "support.url.tld" [":price"]=> int(0) }
部分代码:
$this->db->insert("log_url",array(":name"=>"3ld",":urlid"=>($url->id),":date"=>"NOW()",":type"=>"renew",":status"=>($url->alias.$url->custom.".".$url->tld),":price"=>$price));
数据库插入函数:
public function insert($table,$parameters=array()){
$param="";
$val="";
$insert= $this->ph($parameters);
//Build Query
$query="INSERT INTO {$this->dbinfo["prefix"]}$table";
if(is_array($insert)){
$count=count($insert);
$i=0;
foreach ($insert as $key => $value) {
if($parameters[$value]=="NOW()"){
$val.= "NOW()";
unset($parameters[$value]);
}else{
$val.=$this->quote($value,$parameters);
}
$param.="`$key`";
if(++$i != $count) {
$param.=",";
$val.=",";
}
}
$query.=" ($param) VALUES ($val)";
}
$result = $this->db->prepare($query);
$result->execute($parameters);
if($this->error_message($result->errorInfo())) {
$this->query=strtr($query,$parameters);
$this->db_error=$this->error_message($result->errorInfo());
exit;
}
++$this->num_queries;
return TRUE;
}
报价功能:
private function quote($string,$param=''){
if(empty($param)){
return "'$string'";
}
return $string;
}
生成占位符函数:
private function ph(array $a){
$b=array();
foreach ($a as $key => $value) {
$b[str_replace(":", "", $key)]="$key";
}
return $b;
}
任何信息都有帮助,谢谢。
更新代码:
public function insert($table,$parameters=array()){
$param="";
$val=array();
$insert= array_keys($parameters); var_dump($parameters);
//Build Query
$query="INSERT INTO {$this->dbinfo["prefix"]}$table";
if(is_array($insert)){
$query.=' (`'.implode($insert,"`,`").'`) VALUES (:'.implode($insert,', :').')';
$result = $this->db->prepare($query);
foreach($parameters as $key=>$param) {
$result->bindParam(":".$key, ($param['value']=='NOW()')?date('Y-m-d H:i:s'):$param['value'], PDO::PARAM_STR);
}
}
$result->execute(); //$result->execute($parameters);
if($this->error_message($result->errorInfo())) {
$this->query=strtr($query,$parameters);
$this->db_error=$this->error_message($result->errorInfo());
exit;
}
++$this->num_queries;
return TRUE;
}
按 2015.00 价格生产
通过删除“:”替换对方法的调用发送“:”没有意义,然后通过->ph()
删除那个“:”
$this->db->insert("log_url",
array("name"=>array("value"=>"3ld","type"=>PDO::PARAM_STR), //
"urlid"=>array("value"=>$url->id,"type"=>PDO::PARAM_STR),
"date"=>array("value"=>'NOW()',"type"=>PDO::PARAM_STR),
"type"=>array("value"=>'renew',"type"=>PDO::PARAM_STR),
"status"=>array("value"=>$url->alias.$url->custom.".".$url->tld,"type"=>PDO::PARAM_STR),
"price"=>array("value"=>$price,"type"=>PDO::PARAM_STR))); //
关于 PDO 类型参数,请阅读此处:
http://php.net/manual/en/pdo.constants.php
和这里
http://php.net/manual/en/pdostatement.bindparam.php
在你的函数中你可以替换这个:
$param="";
$val="";
$insert= $this->ph($parameters);
//Build Query
$query="INSERT INTO {$this->dbinfo["prefix"]}$table";
if(is_array($insert)){
$count=count($insert);
$i=0;
foreach ($insert as $key => $value) {
if($parameters[$value]=="NOW()"){
$val.= "NOW()";
unset($parameters[$value]);
}else{
$val.=$this->quote($value,$parameters);
}
$param.="`$key`";
if(++$i != $count) {
$param.=",";
$val.=",";
}
}
$query.=" ($param) VALUES ($val)";
}
$result = $this->db->prepare($query);
有了这个:
$val=array();
$insert= array_keys($parameters);
//Build Query
$query="INSERT INTO {$this->dbinfo["prefix"]}$table";
if(is_array($insert)){
$query.=' (`'.implode($insert,"`,`").'`) VALUES (:'.implode($insert,', :').')';
$stmt= $this->db->prepare($query);
foreach($parameters as $key=>$param) {
//$stmt->bindParam(":".$key, ($param['value']=='NOW()')?date('Y-m-d H:i:s'):$param['value']);
if($param['value']=='NOW()') {
$now = date('Y-m-d H:i:s');
$stmt->bindParam(":".$key, $now, $param['type']);
} else {
$stmt->bindParam(":".$key, $param['value'], $param['type']);
}
}
}
所以,这一定行得通
对了,别忘了零钱:
$result->execute($parameters);
到
$stmt->execute();
下面...
我尝试将 php 中值为 0 的整数保存到 miranda 数据库中的 decimal(7,2)。
但是值为0的整数总是保存99999.99 我找不到解决方案。我认为它可以自动转换。 我在 php.
中使用 PDO除 0 以外的其他值也适用。
我插入的数组:
array(":name"=>"3ld",":urlid"=>($url->id),":date"=>"NOW()",":type"=>"renew",":status"=>($url->alias.$url->custom.".".$url->tld),":price"=>$price)
来自数组的 Var 转储值:
array(6) { [":name"]=> string(3) "3ld" [":urlid"]=> string(1) "1" [":date"]=> string(5) "NOW()" [":type"]=> string(5) "renew" [":status"]=> string(19) "support.url.tld" [":price"]=> int(0) }
部分代码:
$this->db->insert("log_url",array(":name"=>"3ld",":urlid"=>($url->id),":date"=>"NOW()",":type"=>"renew",":status"=>($url->alias.$url->custom.".".$url->tld),":price"=>$price));
数据库插入函数:
public function insert($table,$parameters=array()){
$param="";
$val="";
$insert= $this->ph($parameters);
//Build Query
$query="INSERT INTO {$this->dbinfo["prefix"]}$table";
if(is_array($insert)){
$count=count($insert);
$i=0;
foreach ($insert as $key => $value) {
if($parameters[$value]=="NOW()"){
$val.= "NOW()";
unset($parameters[$value]);
}else{
$val.=$this->quote($value,$parameters);
}
$param.="`$key`";
if(++$i != $count) {
$param.=",";
$val.=",";
}
}
$query.=" ($param) VALUES ($val)";
}
$result = $this->db->prepare($query);
$result->execute($parameters);
if($this->error_message($result->errorInfo())) {
$this->query=strtr($query,$parameters);
$this->db_error=$this->error_message($result->errorInfo());
exit;
}
++$this->num_queries;
return TRUE;
}
报价功能:
private function quote($string,$param=''){
if(empty($param)){
return "'$string'";
}
return $string;
}
生成占位符函数:
private function ph(array $a){
$b=array();
foreach ($a as $key => $value) {
$b[str_replace(":", "", $key)]="$key";
}
return $b;
}
任何信息都有帮助,谢谢。
更新代码:
public function insert($table,$parameters=array()){
$param="";
$val=array();
$insert= array_keys($parameters); var_dump($parameters);
//Build Query
$query="INSERT INTO {$this->dbinfo["prefix"]}$table";
if(is_array($insert)){
$query.=' (`'.implode($insert,"`,`").'`) VALUES (:'.implode($insert,', :').')';
$result = $this->db->prepare($query);
foreach($parameters as $key=>$param) {
$result->bindParam(":".$key, ($param['value']=='NOW()')?date('Y-m-d H:i:s'):$param['value'], PDO::PARAM_STR);
}
}
$result->execute(); //$result->execute($parameters);
if($this->error_message($result->errorInfo())) {
$this->query=strtr($query,$parameters);
$this->db_error=$this->error_message($result->errorInfo());
exit;
}
++$this->num_queries;
return TRUE;
}
按 2015.00 价格生产
通过删除“:”替换对方法的调用发送“:”没有意义,然后通过->ph()
$this->db->insert("log_url",
array("name"=>array("value"=>"3ld","type"=>PDO::PARAM_STR), //
"urlid"=>array("value"=>$url->id,"type"=>PDO::PARAM_STR),
"date"=>array("value"=>'NOW()',"type"=>PDO::PARAM_STR),
"type"=>array("value"=>'renew',"type"=>PDO::PARAM_STR),
"status"=>array("value"=>$url->alias.$url->custom.".".$url->tld,"type"=>PDO::PARAM_STR),
"price"=>array("value"=>$price,"type"=>PDO::PARAM_STR))); //
关于 PDO 类型参数,请阅读此处: http://php.net/manual/en/pdo.constants.php 和这里 http://php.net/manual/en/pdostatement.bindparam.php
在你的函数中你可以替换这个:
$param="";
$val="";
$insert= $this->ph($parameters);
//Build Query
$query="INSERT INTO {$this->dbinfo["prefix"]}$table";
if(is_array($insert)){
$count=count($insert);
$i=0;
foreach ($insert as $key => $value) {
if($parameters[$value]=="NOW()"){
$val.= "NOW()";
unset($parameters[$value]);
}else{
$val.=$this->quote($value,$parameters);
}
$param.="`$key`";
if(++$i != $count) {
$param.=",";
$val.=",";
}
}
$query.=" ($param) VALUES ($val)";
}
$result = $this->db->prepare($query);
有了这个:
$val=array();
$insert= array_keys($parameters);
//Build Query
$query="INSERT INTO {$this->dbinfo["prefix"]}$table";
if(is_array($insert)){
$query.=' (`'.implode($insert,"`,`").'`) VALUES (:'.implode($insert,', :').')';
$stmt= $this->db->prepare($query);
foreach($parameters as $key=>$param) {
//$stmt->bindParam(":".$key, ($param['value']=='NOW()')?date('Y-m-d H:i:s'):$param['value']);
if($param['value']=='NOW()') {
$now = date('Y-m-d H:i:s');
$stmt->bindParam(":".$key, $now, $param['type']);
} else {
$stmt->bindParam(":".$key, $param['value'], $param['type']);
}
}
}
所以,这一定行得通
对了,别忘了零钱:
$result->execute($parameters);
到
$stmt->execute();
下面...