2016-04-13 10 views
0

データベースに書き込む必要のあるフォームデータがあります。私は、クエリ文字列を形成し、mysqliに渡すが、私の主キーがnullにすることはできませんエラーを取得します。それはnullではなく、クエリ文字列はmysql端末で正常に実行されます。PHPでの挿入時にMySqliエラーが発生しましたが、同じクエリ文字列が端末で正常に実行されます

$query_string = "insert into podnosilac (ime, prezime, jmbg) 
     values (
     aes_encrypt('". $mysqli->real_escape_string($_SESSION["ime"])."', @key_str, @init_vector), 
     aes_encrypt('". $mysqli->real_escape_string($_SESSION["prezime"])."', @key_str, @init_vector), 
     aes_encrypt('". $mysqli->real_escape_string($_SESSION["jmbg"])."', @key_str, @init_vector) 
)"; 
if (!$mysqli->query($query_string)) { 
     echo $mysqli->error; 
} 

これは私がちょうどmysqli-の上にそれをエコーするとき$ QUERY_STRINGの値である>クエリ行:

$mysqli->query("insert into podnosilac (ime, prezime, jmbg) 
    values (aes_encrypt('ivana', @key_str, @init_vector), aes_encrypt('corovic', @key_str, @init_vector), aes_encrypt('12345678910', @key_str, @init_vector))"); 
:実際のところ

insert into podnosilac (ime, prezime, jmbg) 
    values (aes_encrypt('ivana', @key_str, @init_vector), aes_encrypt('corovic', @key_str, @init_vector), aes_encrypt('12345678910', @key_str, @init_vector)) 

、私はこの行をしようとすると、

私はまだ "列 'jmbg'をnullにすることはできません。

これはaes_encryptと関係があります。 @key_strと@init_vectorはデータベース上で定義されていますが、これはそれらを渡す方法ではないでしょうか?

なぜこのようなことが起こる可能性がありますか?

+1

@key_strと@init_vectorはどこに定義されていますか? –

+0

プライマリキーは自動的にインクリメントされますか? –

+0

エラーはどうなりますか? – Unex

答えて

1

私は二つのことを考えることができます。

1)あなたがデータベースへの接続を作成するときには、これらのmysqlの変数を設定していない)、正しいデータベース

2に接続されていません。これらの変数がセッション固有のであるため、mysqli_connectの直後に$mysqli->query('SET @yourvariable := whatever');のようなものを入力してください。これは、あなたの端末で(実際にこれらの変数を設定している)クエリを解読し、あなたのスクリプトで作業していない(あなたがいない場合)可能性があります。

+0

@Mike、key_str、およびinit_vectorはnullでした。これらはユーザ定義の変数で、mysql端末ではセッションでのみ使用できます。 PHPで使う$ key_strと$ init_vectorを定義しました。 – ivanacorovic

関連する問題