【问题标题】:how to insert decimal data type into sql server from php如何从php将十进制数据类型插入sql server
【发布时间】:2018-03-02 13:19:56
【问题描述】:

这个错误让我很恼火

[SQLSTATE] => 42000

[代码] => 8114

[message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]将数据类型 varchar 转换为 numeric 时出错。

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

[SQLSTATE] => 42000

[代码] => 102

[消息] => [Microsoft][ODBC Driver 11 for SQL Server][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 存储?

【问题讨论】:

    标签: php sql-server


    【解决方案1】:

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

    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);
    }
    

    这将避免任何引用问题,并使您的查询更安全。

    【讨论】:

      【解决方案2】:

      这是本地化/区域设置的问题,您可能已经为 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 的侵害。

      • 1234563 )。
      • set_locale() 更改 PHP 的语言环境,注意这会影响 所有 转换,因此如果您需要输出使用当前语言环境格式化的数字,可能不适合您.

      【讨论】:

        【解决方案3】:

        对于插入数值,不要在值上添加''

        $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);
        

        【讨论】:

        • 显示这个错误 Array ( [0] => Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 102 [code] => 102 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]',' 附近的语法不正确。[消息] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]',' 附近的语法不正确.) )
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-04
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 2012-01-14
        • 2011-12-23
        相关资源
        最近更新 更多