0

Joomla 2.5 を使用しており、データベースにデータを挿入しようとしています

これは私のコードです

    $db =& JFactory::getDBO();
    $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') )";
    $db->setQuery( $query );
    $db->query();

すべて問題なく、エラーはありませんが、何も挿入されません。

何か案が?ありがとう

4

3 に答える 3

3

Joomla! の何が問題なのかを把握しようとするとき。コードで最初に行うことは、Site->Global Configuration->Server画面のエラー報告レベルを に設定することですMaximum(またはDevelopment、Joomla! をクラッシュさせる拡張機能がインストールされていない場合は、Maximum.

これにより、より多くのエラーとその詳細が報告されるだけでなく、すべての SQL クエリで何が起こっているかを正確に表示する「データベース クエリ」というセクションがある「デバッグ コンソール」も提供されます。

さて、あなたが提供したコードで:

  1. それぞれが構文エラーとして扱われるだけなので、構造化された$query方法では機能しません。JRequest()
  2. 値を抽出するには 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'). " )";

注意すべきこと:

  1. JRequestJoomla をサポートする場合を除き、使用しないでください。1.5 と 2.5 です。使用する必要がありますJInput()-詳細については、そのリンクを読んでください。
  2. 作成しているクエリは古いスタイルの文字列クエリであり、JDatabases 抽象化レイヤーを利用していません。詳細については、こちらを参照してください
  3. JRequest::getCmd()すべての値をフィルタリングし、セット [A-Za-z0-9.-_] 内の文字のみを許可するため、ASCII 以外の値はすべて削除されます。
于 2012-09-20T00:16:44.980 に答える
2

値を引用符で囲む必要があります。

$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 );

また、エラーをキャッチするには、クエリの後に次のコードを追加する必要があります。

if ($db->getErrorNum()) {
    JError::raiseError("Error", $db->stderr());
}
于 2012-09-20T07:50:48.833 に答える