В моем скрипте я разбираю URL-адрес с JSON, а с помощью json_decode я создаю массив.PDO MSSQL - INSERT INTO для проверки дубликатов - с именами заполнителей
Что я хочу, используя PDO для 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), оно предотвращает размещение ЛЮБЫХ строк в БД и использование заполнителей doesn ' т.
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[07002]: [Microsoft][SQL Server Native Client 11.0]COUNT field incorrect or syntax error' in C:\xampp\htdocs\test-PDO.php:129 Stack trace: #0 C:\xampp\htdocs\test-PDO.php(129): PDOStatement->execute() #1 {main} thrown in C:\xampp\htdocs\test-PDO.php on line 129
UPDATE: При использовании
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
возвращается:
Warning: @'@'˜Ñ: in C:\xampp\htdocs\test-PDO.php on line 82 Warning: PDOStatement::execute(): SQLSTATE[07002]: COUNT field incorrect: 0 [Microsoft][SQL Server Native Client 11.0]COUNT field incorrect or syntax error in C:\xampp\htdocs\test-PDO.php on line 82
Любые идеи?
Спасибо заранее