2017-09-27 44 views
1

我从使用PDO的4D读取成功,但没有写入它。使用PDO写入4D

当我尝试插入值到数据库中,我得到以下错误:

SQLSTATE[HY000]: General error: 1248 Failed to execute statement.

这里是我的代码:

<?php 
$dsn = 'dsn-info'; 
$user = 'user-info'; 
$pswd = 'password'; 

$db = new PDO($dsn, $user, $pswd); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Display PDO errors 

$statement = $db->prepare("INSERT INTO order(dealer, customer) VALUES(:dealer, :customer)"); 

$statement->execute(array(
    "dealer" => "Test Dealer", 
    "customer" => "Test Customer" 
)); 
?> 

只是想弄清楚是否有什么毛病我INSERT语句或者是否需要在事物的4D方面改变某些内容以给我写入权限。

+0

'Order'是保留术语(我想,我不熟悉 “4D”)。如果这是一个mysql子系统,我认为它应该是'INSERT INTO \'order \'' – chris85

+0

难道你不会忘记双点吗? - > array(“:dealer”=>“测试经销商”,“:customer”=>“测试客户”) – YaatSuka

+1

@YaatSuka PDO auto会在绑定中添加冒号(如果缺失)。 – chris85

回答

1

提供的查询使用SQL保留字:

INSERT INTO order(dealer, customer) VALUES(:dealer, :customer) 

此查询使用ORDER表名,但ORDER是一个SQL保留字。

如果你看看这个表中的4D结构编辑器的表检查,你会看到这样的内容:
enter image description here

您无法通过SQL访问此表,你应该将其重命名。

请参阅此技术提示: Tech Tip: Guidelines for SQL compatible field names

+0

我最终将表名更改为AppOrds以避免使用保留字,所以现在我已经''插入AppOrds(经销商,客户)VALUES(:经销商,:客户)“''。不幸的是,我仍然得到同样的错误。 – Tyler