的Joomla! SQL Query不会在数据库中插入数据

时间:2012-09-19 19:40:15

标签: sql joomla joomla2.5

我使用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();

一切都很好,我没有任何错误,但它没有插入任何内容。

有什么想法吗?感谢

3 个答案:

答案 0 :(得分:3)

当试图弄清楚你的Joomla出了什么问题!代码首先要做的是将Site->Global Configuration->Server屏幕中的错误报告级别设置为Maximum(或Development如果您没有安装任何扩展程序,则会导致Joomla!崩溃{{1} }}

这不仅会报告更多错误及其详细信息,还会提供一个“调试控制台”,其中有一个名为“数据库查询”的部分,它将准确显示所有SQL查询的内容。

现在,根据您提供的代码:

  1. Maximum将无法按照您的结构方式运行,因为每个$query只会被视为语法错误。
  2. 有两种方法可以提取值,或者先将它们存储在临时变量中,然后在JRequest()中使用它们,或者使用连接来构建查询来修复初始方法。
  3. 方法1

    在PHP wrap a string in " double quotes中,PHP处理字符串并替换任何变量或转义序列。

    $query

    方法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 ); 来电,您需要使用'。' (concatenation operator)构建字符串并进行调用。

    JRequest()

    你应该注意的事情:

      除非您尝试支持Joomla,否则不应使用
    1. $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.5以及2.5。您应该使用JInput() - 阅读该链接以获取更多信息。
    2. 您正在构建的查询是旧式字符串查询,并未利用JDatabases抽象层you should read more about it here
    3. JRequest过滤所有值,只允许集合[A-Za-z0-9。-_]中的字符,因此将删除任何非ascii值。

答案 1 :(得分: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());
}

答案 2 :(得分: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'是主键的名称。