Php 如何运行这个mysql查询

Php 如何运行这个mysql查询,php,mysql,joomla,Php,Mysql,Joomla,我正在尝试从数据库中加载当前登录用户在Joomla中创建的所有记录,但我不确定是否可能在mysql查询中包含php?如果不可能,我将如何执行此操作 SELECT leadname, businessname, postcode, gasoiluser, dervuser, kerouser, cf_uid, cf_id FROM #__chronoforms_data_addupdatelead WHERE createdby = '<?php $u

我正在尝试从数据库中加载当前登录用户在Joomla中创建的所有记录,但我不确定是否可能在mysql查询中包含php?如果不可能,我将如何执行此操作

SELECT
  leadname,
  businessname,
  postcode,
  gasoiluser,
  dervuser,
  kerouser,
  cf_uid,
  cf_id
FROM
  #__chronoforms_data_addupdatelead
WHERE createdby = '<?php
  $user =& JFactory::getUser(); echo $user->get('name') ; ?>'
ORDER BY cf_created DESC

当然,您可以访问PHP变量来创建查询-正如前缀所示,您已经从Joomla内部运行了查询。这意味着它是在php中,类似这样的东西应该可以满足您的需要:

$user =& JFactory::getUser();
$db =& JFactory::getDBO();
if (!$user->guest) {
    $query = 'SELECT leadname, businessname, postcode, gasoiluser, '.
        ' dervuser, kerouser, cf_uid, cf_id '.
        ' FROM #__chronoforms_data_addupdatelead '.
        ' WHERE createdby = '.$db->Quote($user->name)).
        ' ORDER BY cf_created DESC';
    $db->setQuery($query);
}
但是,稍微多了解一些上下文将有助于我们了解您需要做什么——SQL查询周围的代码是什么——它是否在php文件中


记住,echo打印到响应中,这不是您想要做的,在本例中,您想要更改查询;因此,只需将变量内容连接到查询,如上所示;实际上,您应该已经处于定义此查询的php模式,因此mysql是一个接受字符串并返回结果集或错误的数据库服务器

传递给mysql的字符串必须是正确的SQL语句

您的问题不是正确的SQL语句,它是一个等待PHP解析的字符串,任何人都知道

这一部分肯定是PHP:

<?php $user =& JFactory::getUser(); echo $user->get('name') ; ?>

如果要运行该查询,您必须找出用上述块替换的内容

您是如何运行该查询的?嗯?是什么阻止您使用变量并将其放置在查询中?这是否在Joomla内部,对吗?当我运行此程序时,我会得到“未找到数据”,即使有由登录用户创建的记录,请提供更多上下文。您是否在php文件中使用此查询?如何运行它?-1用于将SQL可注入get放入[php]+[SQL]答案中。在1k+rep时,您应该更清楚。正如@Johan正确指出的那样,setQuery不会转义参数,但justs会在需要时返回查询字符串替换/添加_u。虽然,我必须说,$user->get'name'应该不是问题,除非用户真的是臭名昭著的小鲍比:……开玩笑吧,这个值应该已经安全了,因为已经在其他地方处理过了,但我不是100%确定。IIRC,Joomla有$db->escape$value或类似的+1,你的答案完全可以,只需注意:在Joomla中,“escape”变量的正确方法是使用$db->Quote$xxx表示值,$db->nameQuote'xxx表示名称、表名、字段名……@alghimo,你的评论是不正确的,我可以说是“无厘头”,但这是粗鲁的。Quote并没有转义任何内容,它只是在其周围加上引号,表名、列名和字段名不能转义,它们需要被列入白名单。如果你不这么做,鲍比·泰尔斯会帮你的。嗨,约翰$db->Quote在Joomla 1.5中自动调用$db->GetEscape或在Joomla 1.7中调用$db->escape,我不知道在Joomla 1.6中调用哪一个,除非您将第二个参数设置为false。此外,GetEscape在Joomla 1.7中已被弃用。非常感谢您的评论,它让我再次检查了一些我确信的东西,这总是好的:我还看到$db->escape有第二个参数来添加额外的转义。在MySQL db的情况下,它在调用MySQL\u real\u escape\u string之后调用AddCslash。如果您想使用它,那么最好使用$db->escapequestion,如果可以在mysql查询中使用php,我想我已经回答了这个问题
#__chronoforms_data_addupdatelead