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

时间:2016-05-17 02:22:04

标签: moodle

我通过phpmyadmin在moodle中创建了新表。 现在我想将数据插入新表" 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);

2 个答案:

答案 0 :(得分:0)

快速回答:

dev表名为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编辑器来创建表:

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

也永远不会直接用户$ _POST,这可以引入SQL注入。始终使用optional_param()或required_pa​​ram() - 例如:

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

答案 1 :(得分:0)

有不同的可能性。在不知道数据库结构和内部数据的情况下很难分辨。

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

2:该表包含一些您未分配给$ data-Object的必填字段,并且没有默认定义。

3:其中一个字段是唯一的,您传递给该字段的$ data-object的值已在表中由不同的数据集使用。

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

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