0

そのため、この問題は多くの原因の 1 つとして発生する可能性があります。これが私の状況です。

ラックスペース ロード バランサーを介してラックスペース データベースに接続するホスト Web サイトとして ec2 サーバーを使用しています (ラックスペース外のソースからのデータベースへの接続は許可されません)。

とにかく、私の問題は、挿入時にmysqlテーブルをエンコードし、選択時にデコードしようとしていることです。挿入に使用するコードは次のとおりです。

function mysql_insert_sanitize_encrypt_store($databaseName,$names,$values,$link){
$query="INSERT INTO ".$databaseName." (";
foreach($names as $name){
$query=$query.$name.",";
}
$query[strlen($query)-1]=")"; //replace trailing comma with parenthesis 
$query=$query." VALUES (";
foreach($values as $value){
$sanivalue=filter_var($value,FILTER_SANITIZE_URL);
$query=$query."ENCODE('".$sanivalue."','encryptionstring'),";
}
$query[strlen($query)-1]=")";
echo $query;
if(mysql_query($query,$link)){
return 1;
}
}

次のようなクエリを生成します。

INSERT INTO PublishedItems (PublisherUrl,Age,option,experience,goals,gender,minstaken,Item) VALUES (ENCODE('https://www.google.com/profiles/100571329423938175195','encryptionstring'),ENCODE('18-30,30-45','encryptionstring'),ENCODE('15-30','encryptionstring'),ENCODE('novice,amateur','encryptionstring'),ENCODE('Loseweight','encryptionstring'),ENCODE('male','encryptionstring'),ENCODE('120','encryptionstring'),ENCODE('[[{"name":"MW350","value":""},{"name":"MD350","value":""}]]','encryptionstring'))

これは挿入の成功として返されます。

データを再度取得しようとすると、次のコードを使用します。

$query="select ".$decryptionQueries[$count++]." FROM ".$DBName;
mysql_free_result($result);
$result=mysql_query($query,$link);
echo "</br>";
echo $query;
echo "</br>";
echo "decrypted result --->";
var_dump($result);
echo "</br>";
echo "</br>============".$DBName."============UNENCRYPTED=========</br>";
while($row=mysql_fetch_array($result)){
echo "</br>";
var_dump($row);
echo "</br>";
echo "<pre>" . print_r(get_defined_vars(),true) . "</pre>";
}

ここで、復号化クエリは次のように定義されます。

$decryptionQueries=array("DECODE(PublisherUrl, 'encryptionstring'), DECODE(Age,'encryptionstring'), DECODE(option,'encryptionstring'), DECODE(experience,'encryptionstring'), DECODE(goals,'encryptionstring'), DECODE(gender,'encryptionstring'),DECODE(minstaken,'encryptionstring'), DECODE(Item,'encryptionstring')","DECODE(User,'encryptionstring'), DECODE(Age,'encryptionstring'), DECODE(option,'encryptionstring'), DECODE(experience,'encryptionstring'), DECODE(goals,'encryptionstring'),DECODE(gender,'encryptionstring'), DECODE(Injuries,'encryptionstring'), DECODE(availperday,'encryptionstring'), DECODE(Item,'encryptionstring')");

これにより、次のようなクエリが生成されます。

select DECODE(PublisherUrl, 'encryptionstring'), DECODE(Age,'encryptionstring'), DECODE(option,'encryptionstring'), DECODE(experience,'encryptionstring'), DECODE(goals,'encryptionstring'), DECODE(gender,'encryptionstring'),DECODE(minstaken,'encryptionstring'), DECODE(Item,'encryptionstring') FROM PublishedItems

しかし、データを表示すると、rows 変数の定義済み変数エントリは次のようになります。

[row] => Array
        (
            [0] => h
            [DECODE(PublisherUrl, 'encryptionstring')] => h
            [1] => 18-3
            [DECODE(Age,'encryptionstring')] => 18-3
            [2] => 15-3
            [DECODE(option,'encryptionstring')] => 15-3
            [3] => 
            [DECODE(experience,'encryptionstring')] => 
            [4] => 
            [DECODE(goals,'encryptionstring')] => 
            [5] => male
            [DECODE(gender,'encryptionstring')] => male
            [6] => 1
            [DECODE(minstaken,'encryptionstring')] => 1
            [7] => [
            [DECODE(Item,'encryptionstring')] => [

私の質問は: データベースに保存されている文字列の一部のみを返すのはなぜですか? または、なぜ文字列の一部だけを保存するのでしょうか? 私のコードで何が問題になっていますか? エンコードとデコードと関係がありますか?

入力が最初にエンコードされず、データベースから選択されただけの場合、正しく完全に返されるので、エンコードとデコードに関係があると思います。

何が問題だと思いますか?

編集:

テーブルの 1 つの行を反復処理すると、次の出力が得られます (行を var_dumped しただけです)。

============PublishedItems============ENCRYPTED=========

array(9) { ["PublisherUrl"]=> string(1) "A" ["Age"]=> string(3) "7b?" ["option"]=> string(3) "7C?" ["experience"]=> string(0) "" ["goals"]=> string(0) "" ["gender"]=> string(4) " ¬'" ["minsTaken"]=> string(1) "7" ["Item"]=> string(1) "-" ["DateSubmitted"]=> string(19) "2012-09-14 21:05:57" } 

array(9) { ["PublisherUrl"]=> string(1) "A" ["Age"]=> string(3) "7b?" ["option"]=> string(3) "7C?" ["experience"]=> string(0) "" ["goals"]=> string(1) " " ["gender"]=> string(5) " ¬'#" ["minsTaken"]=> string(1) "7" ["Item"]=> string(1) "-" ["DateSubmitted"]=> string(19) "2012-09-14 21:10:41" } 

array(9) { ["PublisherUrl"]=> string(1) "A" ["Age"]=> string(3) "7b?" ["option"]=> string(3) "7C?" ["experience"]=> string(0) "" ["goals"]=> string(1) " " ["gender"]=> string(5) " ¬'#" ["minsTaken"]=> string(1) "0" ["Item"]=> string(1) "-" ["DateSubmitted"]=> string(19) "2012-09-14 21:16:55" } 

array(9) { ["PublisherUrl"]=> string(1) "A" ["Age"]=> string(3) "7b?" ["option"]=> string(3) "7C?" ["experience"]=> string(0) "" ["goals"]=> string(1) " " ["gender"]=> string(4) " ¬'" ["minsTaken"]=> string(1) "7" ["Item"]=> string(1) "-" ["DateSubmitted"]=> string(19) "2012-09-14 22:34:14" } 

array(9) { ["PublisherUrl"]=> string(53) "https://www.google.com/profiles/100571329423938175195" ["Age"]=> string(3) "45+" ["option"]=> string(7) "below15" ["experience"]=> string(6) "novice" ["goals"]=> string(10) "Loseweight" ["gender"]=> string(4) "male" ["minsTaken"]=> string(3) "120" ["Item"]=> string(59) "[[{"name":"MW484","value":""},{"name":"MD484","value":""}]]" ["DateSubmitted"]=> string(19) "2012-09-14 22:49:41" } 

array(9) { ["PublisherUrl"]=> string(53) "https://www.google.com/profiles/100571329423938175195" ["Age"]=> string(3) "45+" ["option"]=> string(8) "below15," ["experience"]=> string(6) "novice" ["goals"]=> string(10) "Loseweight" ["gender"]=> string(4) "male" ["minsTaken"]=> string(3) "120" ["Item"]=> string(117) "[[{"name":"MW310","value":""},{"name":"MD310","value":""}],[{"name":"MW900","value":""},{"name":"MD900","value":""}]]" ["DateSubmitted"]=> string(19) "2012-09-14 22:50:19" } 

array(9) { ["PublisherUrl"]=> string(1) "A" ["Age"]=> string(2) "vS" ["option"]=> string(0) "" ["experience"]=> string(0) "" ["goals"]=> string(0) "" ["gender"]=> string(4) " ¬'" ["minsTaken"]=> string(1) "7" ["Item"]=> string(1) "-" ["DateSubmitted"]=> string(19) "2012-09-14 23:50:32" } 

一部の文字列が暗号化されていないことに注意してください。私はこれをコントロールとして行いました。これは、エンコーディングの挿入が問題であることを示唆していますが、挿入用のクエリ文字列 (2 番目のコード スニペットを参照) がどのようになるかはわかりません。メッセージの一部のみを挿入します。これらの文字列を復号化すると、部分的な文字列が得られますが、全体が正しい場合は正しいでしょう。

さらに、テーブルの宣言は次のとおりです。

create table PublishedItemss (PublisherUrl char(150),Age char(5),option char(8),experience char(20), goals char(50), gender char(8), minsTaken int, item TEXT,DateSubmitted timestamp NOT NULL DEFAULT NOW())';
4

0 に答える 0