我是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();
?>
请帮助,完全卡在这里。
谢谢
答案 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'
是一个单一值,其中name
和email
应该有两个值。因此,尝试将'
放入查询中,例如
...VALUES ('".$_POST['name']."','".$_POST['email']."')");