Joomla! の何が問題なのかを把握しようとするとき。コードで最初に行うことは、Site->Global Configuration->Server
画面のエラー報告レベルを に設定することですMaximum
(またはDevelopment
、Joomla! をクラッシュさせる拡張機能がインストールされていない場合は、Maximum
.
これにより、より多くのエラーとその詳細が報告されるだけでなく、すべての SQL クエリで何が起こっているかを正確に表示する「データベース クエリ」というセクションがある「デバッグ コンソール」も提供されます。
さて、あなたが提供したコードで:
- それぞれが構文エラーとして扱われるだけなので、構造化された
$query
方法では機能しません。JRequest()
- 値を抽出するには 2 つの方法があります。値を事前に一時変数に格納してから使用する
$query
か、連結を使用して最初の方法を修正してクエリを作成します。
方法 1
PHP では、文字列を " 二重引用符で囲むと、文字列は PHP によって処理され、変数またはエスケープ シーケンスが置き換えられます。
$restaurante = JRequest::getCmd('restaurante');
$direccion = JRequest::getCmd('direccion');
$localizacion = JRequest::getCmd('localizacion');
$postal = JRequest::getCmd('postal');
$telefonoEmpresa = JRequest::getCmd('telefonoEmpresa');
$telefonoEmpresa = JRequest::getCmd('telefonoEmpresa');
$query = "INSERT INTO '#__restaurantes' ('nombre', 'direccion', 'localizacion', 'cod_postal', 'telefono', 'web') VALUES ( $restaurante, $direccion, $localizacion, $postal, $telefonoEmpresa, $web )";
$db->setQuery( $query );
方法 2
呼び出しをそのまま使用するJRequest()
には、「.」を使用する必要があります。(連結演算子) を使用して文字列を作成し、インラインで呼び出しを行います。
$query = "INSERT INTO '#__restaurantes' ('nombre', 'direccion', 'localizacion', 'cod_postal', 'telefono', 'web') VALUES ("
. JRequest::getCmd('restaurante') . ", "
. JRequest::getCmd('direccion') . ", "
. JRequest::getCmd('localizacion') . ", "
. JRequest::getCmd('postal') . ", "
. JRequest::getCmd('telefonoEmpresa') . ", "
. JRequest::getCmd('web'). " )";
注意すべきこと:
JRequest
Joomla をサポートする場合を除き、使用しないでください。1.5 と 2.5 です。使用する必要がありますJInput()
-詳細については、そのリンクを読んでください。
- 作成しているクエリは古いスタイルの文字列クエリであり、JDatabases 抽象化レイヤーを利用していません。詳細については、こちらを参照してください。
JRequest::getCmd()
すべての値をフィルタリングし、セット [A-Za-z0-9.-_] 内の文字のみを許可するため、ASCII 以外の値はすべて削除されます。