2012-03-26 84 views
1

我有一个表单,它包含了一些关于相机细节的字段。这是我在Joomla上创建的自定义页面。首先我得到的数据库对象:mysql_real_escape_string没有应用

$db = &JFactory::getDBO(); 

过程在表单中输入摄像机的名称,并加入到DB:

$add_name = $_POST['camera_name']; 
$query_insert_camera = "INSERT INTO #__cameras (camera_name, ... , user_id) VALUES ('".mysql_real_escape_string($add_name)."', ... ,'".$user->id."')"; 
$db->setQuery($query_insert_camera); 
$db->query(); 

我只是得到了摄像头名称为空字符串。如果我拿出mysql_real_escape_string它工作正常。我猜mysql_real_escape_string不喜欢我建立连接的方式......我想。

任何想法?

+0

您是否收到警告?文档说,如果找不到要使用的连接,它将发出警告。否则,我建议你把连接句柄放在函数调用中。 – staticsan 2012-03-26 02:02:59

+0

getDBO()实际使用什么样的连接?它是用'mysql_connect()'还是'mysqli()'或PDO创建一个?什么API被称为? 'mysql_real_escape_string()'只有在连接用'mysql_connect()'建立时才可用。 – 2012-03-26 02:06:31

+1

为什么不使用Joomla的getVar? http://docs.joomla.org/Retrieving_and_Filtering_GET_and_POST_requests_with_JRequest::getVar – Shaz 2012-03-26 02:08:37

回答

1
+0

谢谢。我如何看到它已经逃脱了?如果我只是回应结果,我实际上并没有看到它逃避角色。 – Tom 2012-03-26 03:26:21

+0

我仍然在学习自己 - 当我与那部分挣扎时,我试图通过输入一个'来查看是否逃跑。在使用JRequest :: getVar之前,它打破了,之后它没有。 – Gisto 2012-03-26 04:08:54

-1

您的代码应该工作。我看到使用mysql_real_escape_string()差不多here相同的方式。

代码之间的差异,以及您有哪些是次要的,但也许你可以试试这个:内的Joomla

$db = &JFactory::getDBO(); 

// Escape the POST var as you grab it 
$add_name = mysql_real_escape_string(JRequest::getVar('camera_name', '', 'post', 'string')); 

$query_insert_camera = "INSERT INTO #__cameras (camera_name) VALUES ('" . $add_name . "')"; 
$db->setQuery($query_insert_camera); 
$db->query(); 
+0

不幸的是它仍然输出一个空字符串。 – Tom 2012-03-26 02:25:14

1

我只是碰到用mysql(i)的问题来了_real_escape_string()并发现我需要通过db连接作为第一个参数:

$db = JFactory::getDbo(); 
$myVar = JRequest::getVar('myVarName'); 
$mysqlSafeVar = msqli_real_escape_string($db->getConnection(), $myVar); 
$sql = 'INSERT INTO #__mytable (' .$db->nameQuote('myField'). ') VALUES (' . $db->quote($mysqlSafeVar) . ')'; 
$success = $db->execute();