ModX Revo插入数据库

时间:2018-12-11 08:07:24

标签: modx modx-revolution

我是ModX的新手,试图插入数据库,但始终失败。这是我的插入脚本:

<?php
define('MODX_CORE_PATH', '/aocore/');
define('MODX_CONFIG_KEY','config');
require_once MODX_CORE_PATH . 'model/modx/modx.class.php';

$host = 'localhost';
$username = 'asdsadsada';
$password = 'dsadsadsada';
$dbname = 'sadsadsadsadas';
$port = 3306;
$charset = 'utf8';

$dsn = "mysql:host=$host;dbname=$dbname;port=$port;charset=$charset";
$xpdo = new xPDO($dsn, $username, $password);
 echo $o = ($xpdo->connect()) ? 'Connected' : 'Not Connected';
$results = $xpdo->query("insert into table_name (name,email) VALUES ('".$_POST['name'].",".$_POST['email']."')"); 
$stmt = $modx->prepare($results);
$stmt->execute();
?>

请帮助,完全卡在这里。

谢谢

2 个答案:

答案 0 :(得分:0)

在没有看到很多数据库结构的情况下,更不用说任何错误日志信息了,由于我们无法重现任何内容,因此很难调试/测试代码。

从外观上看,您没有使用对象。您可能需要考虑使用自己的模式,并将给定的记录作为对象插入数据库。有关在MODX中创建自定义数据库表的更多信息,请查看this guide

请确保使用strip_tags()htmlspecialchars()之类的函数对保存到数据库中的输入进行清理,以防止XSS和其他injection attacks 。还要确保您正在使用准备好的语句。

但是通过查看代码,我可以看到您正在执行query()函数,该函数用于查询数据库(检索数据库记录)。如果要执行“ INSERT”之类的SQL语句,则需要使用exec()函数。

示例:

$xpdo->exec("INSERT INTO `table_name` (`name`,`email`) VALUES ('".htmlspecialchars(strip_tags($_POST['name'])).",".htmlspecialchars(strip_tags($_POST['email']))."')");

如果您不打算使用MODX对象,则可能会发现使用PHP的PDO interface with prepared statements更容易。

答案 1 :(得分:0)

嗯,如果还不算太晚的话。您没有分享确切的问题,但是我在您的代码中看到了一些奇怪的地方:

...VALUES ('".$_POST['name'].",".$_POST['email']."')");

如果POST数组中的值进入字符串,则表示

...VALUES ('John,mail@mail.com')");

John,mail@mail.com'是一个单一值,其中nameemail应该有两个值。因此,尝试将'放入查询中,例如

...VALUES ('".$_POST['name']."','".$_POST['email']."')");