2017-07-16 10 views
0

おはよう!PHPのnull値を使ってmysqlに挿入するjavascript辞書から

私がしようとしているのは、辞書(JSON文字列、何でも)をmysqlデータベースに挿入することです。コンソール上では、自分のデータの値がヌルであることは明らかですが、挿入すると失敗します。私はPHPでnullをコーディングしてみましたが、成功しました。なぜNULL値が辞書から来たのか、エラーを返すのだろうかと思います。

例1:

$query = "INSERT INTO table (field1) VALUES (" . $data['item'] . ")" <-- not working if item == null 

例2:

$query = "INSERT INTO table (field1) VALUES (null)" <-- tried testing this if the db accepts null and was successful 

私は、これは一般的な質問もできる知っているので、私はいくつかの同じ質問を見つけることを試みたが、私は答えを見つけることができなかった、非常ましたなぜこのようなことが起こったのか考え出すのは難しい。

ありがとうたくさんの人!

+0

あなたは 'var_dump($ data ['item'])'をチェックしましたか? – Sean

答えて

1

詳細は大いに役立つだろうが、PHPは空の文字列にnullを変換しているため、最良の推測ではあるので、あなたは、このクエリを構築している。

$query = "INSERT INTO table (field1) VALUES()"; 

当然あなたにSQLエラーを与えることになります。試してみてください:

$query = "INSERT INTO table (field1) VALUES (" . (is_null($data['item']) ? 'null' : $data['item']) . ")"; 

また、SQL injectionの脆弱性があります。常に準備されたクエリを使用する必要があります。

+0

うわー、ありがとう。今私はログを作成しようとすると、それは ''(空の文字列)に変換されたPHPを示しています。うーん、私はまだそれがアポストロフィを持っている場合は、mysqlはユーザーの入力を登録できるように2倍されるjson全体をフィルタリングしても脆弱ですか? – Siege21x

+0

またはそれを防ぐための推奨事項はありますか?私はすべての機能とmysqliを使用してストアドファンクションを作成する予定です。それで十分ですか? – Siege21x

+0

あなたの最善の策は、情報セキュリティに関するいくつかの質問をすることです:https://security.stackexchange.com/いつものように、あなたの質問に完全に答えることができるように、多くの詳細を提供してください。 SQLインジェクションは、複雑なトピック、一般的なセキュリティ脆弱性、およびハッカーが積極的にスキャンするものです。間違いなく学ぶ価値がある。強力な入力フィルタリング、準備されたクエリ、ホワイトリストの動的クエリなど、シンプルにしておくといいでしょう。ストアド・ファンクションはSQLインジェクションに対しても脆弱である可能性があるため、注意深くチェックしてください。 –

0

今すぐ取得します。値NULLは、実際には何も含まれていないため(= '')です。しかし、単語の前後にアポストロフィを含めると、クエリにNULLという単語が出力されます。ちょっとした間違い。

関連する問題