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. 有两种方法可以提取值,或者事先将它们存储在临时变量中,然后使用这些值,或者$query通过使用连接来构建查询来修复您的初始方法。

方法一

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

方法二

要按您的方式使用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. JRequest除非您尝试支持 Joomla,否则不应使用!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 回答
1

这也应该有效:

$data =new stdClass();
$data->id = null;
$data->field1 = 'val1';
$data->field2 = 'val2';
$data->field3 = 'val3';

$db = JFactory::getDBO();
$db->insertObject( '#__mytable', $data, id );

stdClass 是一个 php 基类,所有其他类都从该基类扩展而来。

'id' 是主键的名称。

于 2013-05-20T06:59:08.907 回答