2017-01-21 7 views
0

Я запускаю PHP PDO 5.6.29. Вот мой код:SQLite query дает ошибку

$QsoId = $SQLiteData["QsoId"]; 
$SQLiteData["MyAntenna"] = $ODBCAnt; 
$query = sprintf("INSERT INTO Log (QsoId, MyAntenna) VALUES (%s, '%s')",$QsoId, $ODBCAnt); 

$qry = $SQLite["connection"]->prepare($query); 
/* bind params */ 
$qry -> bindParam(':QsoId', $QsoId, PDO::PARAM_INT); 
$qry -> bindParam(':MyAntenna', $ODBCAnt, PDO::PARAM_STR); 
$res = $qry->execute(); 

Я получаю PDOException с сообщением «SQLSTATE [HY000]: Общая ошибка: 25 заклинить или индекс столбца вне диапазона»

Я пытаюсь обновить MyAntenna поле, но Я использую QSOId как уникальный локатор записи. Я знаю заранее, что эта запись существует и ее можно найти. Я не хочу добавлять новую запись. В записи записано 138 полей. Я превысил лимит?

+0

Когда вы говорите, что не хотите добавлять новую запись, вы имеете в виду, что хотите обновить существующие записи? Если это так, вы хотите сделать инструкцию UPDATE, например 'UPDATE Log SET MyAntenna = $ SQLiteData [" MyAntenna "] WHERE QsoId = $ QsoId' пример кода не является PDO и только для целей цели. Btw – mrjamesmyers

+0

PDO Пример обновления http: // stackoverflow.com/questions/18323065/update-query-with-pdo-and-mysql#answer-18323170 – mrjamesmyers

+1

Невозможно привязать какие-либо значения, потому что вы уже ввели их непосредственно в запрос в операторе sprintf() –

ответ

0

От того, что вы сказали, похоже, что вы хотите обновить существующую запись, а не вставить. Ошибка, которую вы получаете, вероятно, связана с тем, что поле QsoId является полем первичного ключа, которое разрешает только уникальные идентификаторы (выполнение вставки с тем же идентификатором будет означать две строки с одинаковым идентификатором)

Для этого вы сделаете инструкцию UPDATE , вы бы сделали что-то вроде ниже (непроверено):

$QsoId = $SQLiteData["QsoId"]; 
$SQLiteData["MyAntenna"] = $ODBCAnt; 
$query = " 
      UPDATE `Log` 
       SET `MyAntenna` = :MyAntenna 
      WHERE `QsoId` = :QsoId "); 

$qry = $SQLite["connection"]->prepare($query); 
/* bind params */ 
$qry -> bindParam(':QsoId', $QsoId, PDO::PARAM_INT); 
$qry -> bindParam(':MyAntenna', $ODBCAnt, PDO::PARAM_STR); 
$res = $qry->execute(); 
+0

Да ОБНОВИТЬ. Все, что я нашел на SQLite, сказал, чтобы использовать INSERT, и он обновил бы существующую запись, или INSERT - новые записи, если и существующей записи не было. Ничего, что я читал, не упоминал UPDATE, но я, вероятно, не сделал правильный поиск Google. Я попробую это. Благодарю. – Pilot

+1

Это сделало трюк. FWIW «QsoId» - это неформатированный DTG, и в этой базе данных гарантировано быть уникальным. Спасибо всем. – Pilot

+0

Можете ли вы отметить правильный ответ, если он исправил вашу проблему? – mrjamesmyers