MySQL有时无效的查询语法

时间:2013-04-13 23:55:53

标签: php mysql encryption mysqli

尝试加密社会安全号码并且查询偶尔会起作用,但每5到10次就会抛出一次

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '�9~���d�~/C�yK�~�� _', ' 50', '62' )' at line 1
SSN: _mosPEdaXEsB7zJCQe5aymaCmkcSl9bnPL5ClLXcz2QA=_ 
IV: _ �6�k���_O�'�9~���d�~/C�yK�~�� _

这是代码

    //Encryption/Decryption key
     $Key = hash("SHA256", $Lname, true);
    //Encryption Algorithm
    $cipher_alg = MCRYPT_RIJNDAEL_256;

    $iv =  mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg, MCRYPT_MODE_ECB), MCRYPT_RAND);

    $ESSN = mcrypt_encrypt($cipher_alg, $Key, $SSN, MCRYPT_MODE_CBC, $iv);
    $ESSN = '_' . base64_encode($ESSN) . '_';
     $iv = '_' . $iv . '_';

if(!mysqli_query($connection, "CALL Update_ClientSSN('$ESSN','$iv', ' $AppID',  '" . $_SESSION['ID'] . "' );")){
        $Save .= " Error saving Client SSN";
    echo $connection->error;
    echo $ESSN . ' IV: ' . $iv;
    }

最初我只是将IV和密文连接起来然后爆炸,但仍然会出错,所以下划线只是我在试验。我很难过

2 个答案:

答案 0 :(得分:2)

您应该尝试对$ iv变量进行base64_encode,就像使用$ ESSN一样,或者至少将它转换为十六进制格式,然后再将其存储到数据库中,看看它是否有帮助。原因是$ iv可能包含非法字符,例如'(单引号)

答案 1 :(得分:0)

您的问题是,生成的值$iv包含单引号(位于中间的某处:O ' 9),这会导致无效的插入语句。使用预准备语句(PDO或Prepared statements)或编码$iv可以解决您的问题