insert_record();写入数据库时​​出错

insert_record(); Error writing to database

我通过 phpmyadmin 在 moodle 中创建了新的 table。 现在我想将数据插入到新的 table "dev" 中。 我遇到 写入数据库时​​出错 。 我的代码是...

if($_POST['send']){
    $id =$_POST['id'];
    $name =$_POST['name'];
    global $DB;
    $data = new stdClass();
    $data->dev_id  = $id;
    $data->dev_name = $name;
    $DB->insert_record('dev', $data);

快速回答:

dev table 叫 mdl_dev 吗?

长答案:

在开发过程中打开调试,这会给你更详细的错误信息:

https://docs.moodle.org/30/en/Debugging

在您的 config.php 中添加:

// Developer settings - not for production or staging!
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 0);

$CFG->debug = E_ALL | E_STRICT; // 32767;
$CFG->debugdisplay = true;

此外,您应该使用 XMLDB 编辑器来创建 tables :

https://docs.moodle.org/dev/XMLDB_editor

也不要直接使用 $_POST,这会引入 SQL 注入。始终使用 optional_param() 或 required_param() - 例如:

$send = optional_param('send', false, PARAM_BOOL);
$id = optional_param('id', null, PARAM_INT);
$name = optional_param('name', null, PARAM_TEXT);
if ($send) {
    ...

有不同的可能性。不知道数据库结构和里面包含的数据就很难说了。

1: table 不存在。正如 Russell England 所说,确保 table mdl_dev 存在。

2:table 有一些您没有分配给 $data-Object 的必填字段,并且没有定义默认值。

3:其中一个字段是唯一的,您为该字段传递给 $data-object 的值已经在 table 中被另一个数据集使用。

4:您传递给 table 的数据类型与为您的 table 字段定义的类型不匹配,例如尝试在 INT 字段中保存字符串。

5:您的值超出了允许的范围,例如名称超过了该字段定义的最大长度。