【问题标题】:ModX Revo Insert to DatabaseModX Revo 插入数据库
【发布时间】:2018-12-11 08:07:24
【问题描述】:

我是 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();
?>

请帮忙,完全卡在这里。

谢谢

【问题讨论】:

    标签: modx modx-revolution


    【解决方案1】:

    如果看不到您的大部分数据库结构,更不用说任何错误日志信息,就很难调试/测试您的代码,因为我们无法重现任何内容。

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

    请确保您使用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 更容易。

    【讨论】:

      【解决方案2】:

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

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

      如果 POST 数组中的值进入字符串,则说明

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-05
        相关资源
        最近更新 更多