如何从php

时间:2017-09-21 09:01:58

标签: php sql-server

这个错误让我恼火

  

[SQLSTATE] => 42000

     

[code] => 8114

     

[message] => [Microsoft] [SQL Server的ODBC驱动程序11] [SQL Server]将数据类型varchar转换为数字时出错。

当我删除' '时,它会显示

  

[SQLSTATE] => 42000

     

[code] => 102

     

[message] => [Microsoft] [SQL Server的ODBC驱动程序11] [SQL Server]','。

附近的语法不正确

我尝试从网页(PHP)插入金额数据,但我不知道我是否可以使用CASTCONVERT

 if ($_SERVER['REQUEST_METHOD'] =='POST' && isset($_POST['save'])) 
    {
        $save = "INSERT INTO trans_details 
        (badge_id,user_id,comp_id,amount,cash,subsidy,trans_date) 
        values('$badge_id','$user_id','$cid','$amount','$total_need','$amount',$stamp)"; 
        $result = sqlsrv_query($conn, $save);
    }

同时,我的数据库amounttotal_need被声明为decimal(12,2)。我尝试使用isNumeric()函数,但它存储值1?我该怎么做才能直接从php存储?

3 个答案:

答案 0 :(得分:0)

对于插入数值,请不要将cf enable-ssh <app-name>添加到值

''

答案 1 :(得分:0)

这是本地化/区域设置的问题,您可能已将PHP配置为使用逗号(,)作为小数点分隔符而不是点(.)的区域设置,例如,假设$ product_id为1$price1.23,则执行以下操作:

$sql_insert = "INSERT INTO products (product_id, price) values ($product_id,$price)";
你得到了:

INSERT INTO Products VALUES (1,1,23) -- three values: 1, 1 and 23

而不是:

INSERT INTO Products VALUES (1,1.23) -- two values: 1 and 1.23

可能的解决方案:

  • 使用prepared statements而不是手动创建查询字符串。这也有助于保护您免受SQL injection

  • 的影响
  • 如果由于任何原因您无法使用预准备语句使用number_format()将值转换为字符串,则该函数具有用于指定小数点字符的可选参数(也设置千位分隔符)作为'')。

  • 使用set_locale()更改PHP的区域设置,请注意这会影响所有转换,因此如果您需要输出使用当前的语言环境。

答案 2 :(得分:0)

这是使用准备好的陈述的另一个好理由。试试这个:

if (isset($_POST["save"])) {
    $query      = "INSERT INTO trans_details (
                       badge_id, user_id, comp_id, amount, cash, subsidy, trans_date
                   )
                   VALUES (?, ?, ?, ?, ?, ?, ?)";
    $parameters = [$badge_id, $user_id, $cid, $amount, $total_need, $amount, $stamp]; 
    $result     = sqlsrv_query($conn, $query, $parameters);
}

这样可以避免引用方面的任何问题,并使您的查询更安全。