Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php INSERT语句为我提供了'';空字符串,但它似乎需要为null_Php_Mysql_Oop_Null_Insert - Fatal编程技术网

Php INSERT语句为我提供了'';空字符串,但它似乎需要为null

Php INSERT语句为我提供了'';空字符串,但它似乎需要为null,php,mysql,oop,null,insert,Php,Mysql,Oop,Null,Insert,好的,我在php中有一个类对象,其中创建了INSERT语句,因此它不会为ID提供值,因为这意味着当ID传递到数据库时,它只是自动递增的。它过去有用,现在不行了。事实上,它仍然可以在我的live server上工作,但不能在我的localhost开发环境上工作。我的sql出来时是这样的: INSERT INTO sessions (u_sess, user_id, school_id, teacher_id, test_id, holder_id, visible, date_created, l

好的,我在php中有一个类对象,其中创建了INSERT语句,因此它不会为ID提供值,因为这意味着当ID传递到数据库时,它只是自动递增的。它过去有用,现在不行了。事实上,它仍然可以在我的live server上工作,但不能在我的localhost开发环境上工作。我的sql出来时是这样的:

INSERT INTO sessions (u_sess, user_id, school_id, teacher_id, test_id, holder_id, visible, date_created, last_updated) VALUES ('', '1', '1', '', '', '', '', '2019-09-19 22:18:58', '2019-09-19 22:18:58')Database query failed.
当我将其粘贴到phpMyAdmin的SQL窗口中时,它会为我提供有关问题的更详细反馈:

1366-第1行的列“u_sess”的整数值不正确:“” 因此,我更改了INSERT语句,使其看起来第一个位置有一个NULL,并将错误向下滚动到下一个“”空字符串。因此,我猜测错误是因为我的php对象正在生成一个包含空字符串的INSERT语句,而不是所有未知值的NULL语句。我不知道如何正确修改我的php对象,使其能够识别并重新定义每个“”为NULL。我相信这会解决这个问题,因为当我将所有空字符串都改为null时,这个东西最终会正确插入

以下是我的创建方法:

        global $database;
        $attributes = $this->sanitized_attributes();
        $sql  = "INSERT INTO ".self::$table_name." (";
        $sql .= join(", ", array_keys($attributes));
        $sql .= ") VALUES ('";
        $sql .= join("', '", array_values($attributes));
        $sql .= "')";
        echo $sql;

      if($database->query($sql)) {
        $this->u_sess = $database->insert_id();
        return true;
      } else {
        return false;
      }
    }

让我们考虑一下这个代码>函数< /> >:

function handle($input) {
    return ((!$input) && ($input !== '')) ? "null" : $input;
}

调用此
函数
将产生您喜欢的值。

谢谢Lajos!我正在接受你的建议或尝试……而反对票肯定不是我。如果你不介意再帮我一点忙的话…我对OOP的工作方式不太了解…我想我会随着时间的推移变得更好,但是我想听听你关于如何将你的函数编织到我这里的东西上的建议。我的意思是,在步骤中,哪里是将这些属性发送到函数的最佳时机?那么,你到底要怎么写呢$属性=$this->handle($attributes)。。。在$sql.=”)值(“;…行?@FredericPool不用担心,我们所有人都是OOP的初学者(除了最初实现OOP的人)。在当前的实现中,您需要将return更改为return((!$input)&&($input!=”)?“null”:“..$input”“;不必担心查询中的撇号。至于$attributes数组,您可以执行类似于foreach($attributes As$key=>$value)$attributes[$key]=handle($value)的操作;@FredericPool解决此问题后,您需要确保使用PDO防止SQL注入。它处理我们在名为handle的函数中处理的逻辑,因此您将不再需要它,您将能够创建参数化查询。不要担心您当前的工作,当再次成功重写时,它将这就是所谓的重构,当前的步骤对于您的学习和信心的建立非常重要。