这个错误让我恼火
[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)插入金额数据,但我不知道我是否可以使用CAST
或CONVERT
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);
}
同时,我的数据库amount
和total_need
被声明为decimal(12,2)
。我尝试使用isNumeric()
函数,但它存储值1?我该怎么做才能直接从php存储?
答案 0 :(得分:0)
对于插入数值,请不要将cf enable-ssh <app-name>
添加到值
''
答案 1 :(得分:0)
这是本地化/区域设置的问题,您可能已将PHP配置为使用逗号(,
)作为小数点分隔符而不是点(.
)的区域设置,例如,假设$ product_id为1
且$price
为1.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);
}
这样可以避免引用方面的任何问题,并使您的查询更安全。