2011-12-26 21 views
4

My MySQLテーブルには、trueまたはfalseの値を格納するために使用するtinyint(1)の値が格納されています。mysqlにPHPのfalseを挿入する

私は、次のPHP変数を持って次のように

$name = ''; 
$description = ''; 
$active = true; 

を今私のSQLクエリは次のとおりです。

$query = "INSERT into my_table (my_name, my_description, active) VALUES ('$name', '$description', $active) "; 

アクティブ$のための私の値がtrueの場合にのみ動作します。アクティブ変数がfalseになるとすぐに、PHPは0ではなく空の文字列を挿入し、クエリは失敗します。

このようなクエリでfalseを使用する最も良い方法は何ですか?

私は手動でfalseを '0'文字列に変換する必要がありますか? PHP側ですぐに発作を使用する方が良いですか?つまり、$ active = '1'と宣言します。 、または何とかPHPを取得して、常にfalseを '0'文字列に変換できますか?

おかげで、すべての値の マイケル

+1

の可能複製(http://stackoverflow.com [ 'false' をMySQLでいくつかの文字列に一致することはできますか?]/question/8369379/can-false-match-some-string-in-mysql) –

+0

実際にあなたのデータベースに 'bit(1)'データ型を使用するべきです。これは '0'(偽)と' 1'(真)入力のみを許可します。 – Burgi

答えて

4

まず、あなたがそのような何かを行うことができます偽に関する特定の問題のために、その後、SQLインジェクションを防ぐためにmysql_real_escape_stringのかmysqli_real_escape_stringまたはデータベース接続に適した他の方法を使用してエスケープする必要があります。

$query = "INSERT into my_table (my_name, my_description, active) VALUES ('$name', '$description', ".($active?1:0) .")"; 

またはあまりにも作業を行う必要がありますintへのアクティブキャスト$:

$query = "INSERT into my_table (my_name, my_description, active) VALUES ('$name', '$description', ".((int) $active)).")"; 
+0

ありがとうございます。私はこの質問を私の実際のコードから単純化しました。すべての文字列は適切にエスケープされます:-)私はまずデータ型を変換することなく解決策を望んでいましたが、これは不可能です。 –

+0

二重データ型変換を避けるために、$ bool? '1':最初の例で示したように '0'を使用しましたが、整数ではなく文字列を返します。 –

6

intにあなたの変数を変換します

intval($active) 
0

はmysql_real_escape_stringの関数を使用して...

$query = "INSERT into my_table (my_name, my_description, active) VALUES ('".mysql_real_escape_string($name)."', '".mysql_real_escape_string($description)."', ".mysql_real_escape_string (((int) $active))).")"; 
関連する問題