使用mysqli插入查询的不稳定结果
我正在运行相同的mysqli插入查询使用精确相同的参数。它大概有三分之一的时间是成功的,我不知道哪里出了问题。使用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解密程序失败,但事实并非如此。所有参数都是完美的,包括解密值。是我的插入语句错误的问题?我尝试过引用字段的各种组合,但没有任何一致的结果。
表结构是这样的:
'SESSION_ID' INT(11)
'session_key可以' TINYBLOB
'IV' TINYBLOB
'的updated_at' 日期时间
我不不明白为什么我的结果如此不一致。如果失败了,为什么不每次都失败?如果有效,为什么每次都不行?很困惑。任何帮助表示赞赏。谢谢!
已经提出到OP在注释中使用or die(mysqli_error($link))
到mysqli_query()
带领他们找到为什么他们的查询是失败的原因。
他们的意见:
“我终于在这里的错误信息是:您的SQL语法错误;检查对应于您的MySQL服务器版本正确的语法手册使用附近的'<'§y?'T]î'Ágô,EÈöJÀÊ?ûTÑÑÑ?, 2015-04-05 19:26:00)'在第2行必须与我的字节有关我正在努力储存。“
和
“现在我明白了这个问题。你地看着mysqli_error的建议是什么导致我的解决方案(很多困难的在我结束来访问它了!) 。真正的错误(在我正确地引用了我的字段后)是'PRIMARY'键的重复条目'2147483647'。我的ios应用程序随机分配一个无符号整数值(0 - 4294967294),但是一个int(11)字段maxex在2147483647 。因此,我的一半价值被作为重复收到,从而导致错误。问题解决了,谢谢你的帮助!
从拉:
2147483647是MySQL最大的int值。只需将类型从int更改为bigint即可。
- 它解释了重复的错误。
感谢您的帮助! – Alex 2015-04-05 19:51:48
@Randall不客气Randall。毕竟这是2147483647导致重复的错误。我想那个号码响了一声遥远的钟声!我已经添加了这个答案,如果你还没有看到它, *欢呼!* – 2015-04-05 19:52:43
大数字将得到雅'每次! * Mornin'拉尔夫!* – 2015-04-06 12:52:57
您是否尝试提交交易?
/* commit transaction */
if (!$mysqli->commit()) {
print("Transaction commit failed\n");
exit();
}
我没有,但它没有解决任何问题。感谢您的建议。 – Alex 2015-04-05 18:34:00
您在列声明中使用了不正确的标识符。把'mysqli_error($ link)'加入'mysqli_query()',你会看到语法错误。还要确保'$ session_id'不是一个被传递的字符串。 – 2015-04-05 18:35:51
我看不到它。你可以说得更详细点吗?谢谢! – Alex 2015-04-05 18:39:34
我看到你删除了'updated_at'前面的引号''''''''''''''''''''''''''''''''这就是我为什么这么说的原因。 – 2015-04-05 18:40:33