2015-04-05 2 views
1

Я запускаю тот же запрос на включение mysqli, используя точный те же параметры. Это успешное около 1/3 времени, и я не могу понять, что происходит не так.Ошибочные результаты с запросом на вставку mysqli

<?php 
    //... 
    $decrypted_session_key = 'unavailable'; // initialize 
    $res = openssl_get_privatekey($priv_key, $passphrase); 
    $result = openssl_private_decrypt($encrypted_session_key, $decrypted_session_key, $res, OPENSSL_PKCS1_OAEP_PADDING); 

    if ($decrypted_session_key == 'unavailable') { 
     mysqli_close($link); 
     echo json_encode(array('result' => 'failed', 'message' => 'failed to decrypt the session key')); 
     die(); 
    } 

    if (!$decrypted_session_key) { 
     echo json_encode(array('result'=>'failed', 'message'=>'decrypted session key has failed')); 
     die(); 
    } 

    $updated_at = date("Y-m-d H:i:s"); 

    // save this record to the database 
    $result = mysqli_query($link, "INSERT INTO Session_Keys (session_id, session_key, iv, updated_at) 
            VALUES ($session_id, '$decrypted_session_key', '$iv', '$updated_at')"); 

    if (!$result) { 
     $param_check = $session_id . " " . base64_encode($iv) . " " . base64_encode($decrypted_session_key) . " " . $updated_at; 
     echo json_encode(array('result'=>'failed', 'message'=>$param_check)); 
     die(); 
    } 

    // ... 
} 

Всякий раз, когда это терпит неудачу, я возвращаю последнее выражение эха. Мое подозрение заключалось в том, что процедура расшифровки php терпела неудачу, но это не так. Все параметры идеальны, включая значение дешифрования. Проблема в том, что моя инструкция insert неверна? Я пробовал различную комбинацию цитирования полей, но ничего не последовал.

Структура таблицы, как это:

'session_id' INT (11)
'session_key' TINYBLOB
'IV' TINYBLOB
'updated_at' DateTime

enter image description here Я не» Не понимаю, почему мои результаты настолько непоследовательны. Если он терпит неудачу, почему не терпит неудачу каждый раз? Если он работает, почему он не работает каждый раз? Очень смущенный. Любая помощь приветствуется. Благодаря!

+0

Вы используете неправильные идентификаторы в объявлении столбца. Добавьте 'или die (mysqli_error ($ link))' в 'mysqli_query()', и вы увидите ошибку синтаксиса. Также убедитесь, что '$ session_id' не является передаваемой строкой. –

+0

Я этого не вижу. Можете быть более конкретными? Благодаря! – Alex

+0

Я вижу, что вы удаляете цитаты вокруг 'updated_at)' - У вас была '' updated_at ') 'раньше. Вот почему я это сказал. –

ответ

1

Предложив на ОР в комментариях использовать or die(mysqli_error($link)) к mysqli_query() привел их, чтобы найти причину, почему их запрос был неисправной.

Их комментарии:

«Я, наконец, получил на сообщение об ошибке, то здесь: У Вас есть ошибка в вашем синтаксисе SQL, проверьте руководство, которое соответствует Вашей версии сервера MySQL для правого синтаксиса к используйте около '<'§y?' T] î'Á gô, EÈöJÀÊ? Xû¶T ¢ ÑÖ ?, 2015-04-05 19:26:00) 'в строке 2 Должно быть, что-то делать с байтами, которые я я пытаюсь сохранить ».

и

«Теперь я понимаю проблему. Ваше предложение о поиске на mysqli_error является то, что привело меня к решению (после многих трудностей на моем конце, чтобы получить доступ к нему!) Действительная ошибка (после того, как я правильно процитировал мои поля) - Дублировать запись «2147483647» для ключа «PRIMARY». Мое приложение ios случайным образом назначает целое число без знака (0 - 4294967294), но максимальное значение int (11) в 2147483647 Итак, половина моих значений была получена как дубликаты, тем самым вызывая ошибку. Проблема решена. Спасибо за вашу помощь! "


Вытащил из:

https://stackoverflow.com/a/17783287/

2147483647 является самым большим ИНТ значение для MySQL. Просто измените тип от int до bigint.

  • который объясняет дублирующуюся ошибку.
+0

Спасибо за вашу помощь! – Alex

+0

@ Randall Добро пожаловать в Рэндалл. Это было 2147483647, вызвавшее двойную ошибку. Я подумал, что номер звонил в далекий колокол! Я добавил это к моему ответу, если бы вы не видели его уже; * cheers! * –

+0

Большие числа получат ya 'каждый раз! * Mornin 'Ralph! * –

0

Вы попытались совершить сделку?

/* commit transaction */ 
if (!$mysqli->commit()) { 
    print("Transaction commit failed\n"); 
    exit(); 
} 

http://php.net/manual/en/mysqli.commit.php

+0

У меня не было, но это ничего не решает. Спасибо за предложение. – Alex