在我的脚本中,我使用 JSON 解析 URL,并使用 json_decode 创建一个数组。
我想要的是,使用 PDO for mssql,每次我解析这个脚本时,检查即将插入数据库的值是否已经存在,如果不存在,则将它们插入数据库。我没有要检查的特定列,我只想检查我插入的内容(如每一列)是否与数据库中已经存在的内容相同。
我到目前为止看起来像这样:
$json = file_get_contents($jsonurl,0,null,null);
$jsonArray = json_decode($json, true);
// Connection code goes here of course... $DBH = new PDO ... etc.
$query = "IF NOT EXISTS (SELECT * FROM dbo.table
WHERE
FirstName = :fn
AND LastName = :ln
AND Address = :addr
)
BEGIN
INSERT INTO dbo.table
(FirstName, LastName, Address)
VALUES
(:fn, :ln, :addr)
END";
$STH = $DBH->prepare($query);
// assign variables to each place holder
$STH->bindParam(':fn', $firstname);
$STH->bindParam(':ln', $lastname);
$STH->bindParam(':addr', $address);
// Loop through every contacts in the array and grab the following values
foreach($jsonArray['contacts'] as $key => $val){
$firstname = $val["properties"]["firstname"]["value"];
$lastname = $val["properties"]["lastname"]["value"];
$address = $val["properties"]["address"]["value"];
$STH->execute();
}
$jsonArray
可能包含一些空值,不确定这是否会导致任何问题..
所以在上面的查询中,如果我手动输入一个 FirstName 值,例如,它不存在,那么它可以工作,但是当我输入一个存在于 bindParam 数组 ($firstname) 中的值时,它会阻止放置任何行在数据库中并使用占位符也不起作用。
致命错误:C:\xampp\htdocs\test-PDO.php:129 中的消息“SQLSTATE[07002]:[Microsoft][SQL Server Native Client 11.0]COUNT 字段不正确或语法错误”未捕获异常“PDOException”:129 堆栈跟踪: #0 C:\xampp\htdocs\test-PDO.php(129): PDOStatement->execute() #1 {main} 在第 129 行的 C:\xampp\htdocs\test-PDO.php 中抛出
更新:使用时
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
它返回:
警告:@'@'~Ñ:在第 82 行的 C:\xampp\htdocs\test-PDO.php 中警告:PDOStatement::execute(): SQLSTATE[07002]: COUNT 字段不正确:0 [Microsoft][SQL Server Native Client 11.0]第 82 行 C:\xampp\htdocs\test-PDO.php 中的 COUNT 字段不正确或语法错误
有任何想法吗?
先感谢您