当试图弄清楚你的 Joomla 出了什么问题时!代码要做的第一件事是将Site->Global Configuration->Server
屏幕中的错误报告级别设置为Maximum
(或者Development
如果您没有安装任何会导致 Joomla 崩溃的扩展!在Maximum
.
这不仅会报告更多错误及其详细信息,还会提供一个“调试控制台”,其中有一个名为“数据库查询”的部分,它将准确显示所有 SQL 查询发生的情况。
现在,在您提供的代码上:
$query
不会按照您构建它的方式工作,因为每个都将JRequest()
被视为语法错误。
- 有两种方法可以提取值,或者事先将它们存储在临时变量中,然后使用这些值,或者
$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'). " )";
您应该注意的事项:
JRequest
除非您尝试支持 Joomla,否则不应使用!1.5 和 2.5。您应该使用JInput()
- 阅读该链接以获取更多信息。
- 您正在构建的查询是旧式字符串查询,并没有利用 JDatabases 抽象层,您应该在此处阅读更多相关信息。
JRequest::getCmd()
过滤所有值,并且只允许集合 [A-Za-z0-9.-_] 中的字符,因此将删除任何非 ascii 值。