“灵活的做事方式”;在“;使用PHP mysqli进行查询?

“灵活的做事方式”;在“;使用PHP mysqli进行查询?,php,mysql,mysqli,Php,Mysql,Mysqli,好吧,这会有点复杂 但是现在我正在使用一个HomeWrite函数来创建一个查询,以便在db中插入一个页面 我想知道是否有一种更聪明的方法来实现灵活的“插入”方法 问题是,在创建页面时,我有一些字段是可选的,因此现在我正在使用这些字段,其中我正在运行所有字段并检查它们是否已设置: //creates an Array which can be used to make a MySQL query function createQueryArray($new) { if (isset($th

好吧,这会有点复杂

但是现在我正在使用一个HomeWrite函数来创建一个查询,以便在db中插入一个页面

我想知道是否有一种更聪明的方法来实现灵活的“插入”方法

问题是,在创建页面时,我有一些字段是可选的,因此现在我正在使用这些字段,其中我正在运行所有字段并检查它们是否已设置:

//creates an Array which can be used to make a MySQL query
function createQueryArray($new) {
    if (isset($this->users_id))
        $this->query_array['users_id'] = mysql_real_escape_string($this->users_id);
    if (isset($this->pagename))
        $this->query_array['pagename'] = mysql_real_escape_string($this->pagename);
    if (isset($this->seo_pagetitle))
        $this->query_array['seo_pagetitle'] = mysql_real_escape_string($this->seo_pagetitle);
    if (isset($this->seo_description))
        $this->query_array['seo_description'] = mysql_real_escape_string($this->seo_description);
    if (isset($this->seo_keywords))
        $this->query_array['seo_keywords'] = mysql_real_escape_string($this->seo_keywords);
    if (isset($this->seo_robots))
        $this->query_array['seo_robots'] = mysql_real_escape_string($this->seo_robots);
    if (isset($this->seo_canonical))
        $this->query_array['seo_canonical'] = mysql_real_escape_string($this->seo_canonical);
    if (isset($this->type))
        $this->query_array['page_type'] = mysql_real_escape_string($this->type);
    //$this->query_array['last_edited'] = date("Y-m-d H:i:s");
}
之后,我使用数组和表调用此函数,我想将页面插入其中:

function createInsertStm($arr, $table) {
    $mysqlQuery = ("INSERT INTO $table (");
    $insert = "";
    $values = "";
    if (is_array($arr))
        foreach ($arr as $key => $value) {
            if ($insert == "")
                $insert .= $key;
            else
                $insert .= ', ' . $key;
            if ($values == "")
                $values .= (preg_match('/(MAX\(id\))(.*?)/', $value)) ? $value : '"' . $value . '"';
            else
                $values .= (preg_match('/(MAX\(id\))(.*?)/', $value)) ? "," . $value : ',"' . $value . '"';
        }
    $mysqlQuery .= $insert;
    $mysqlQuery .= ') VALUES (';
    $mysqlQuery .= $values;
    $mysqlQuery .= ')';
    return $mysqlQuery;
}

$db->query($queryArray["pages"]);

是否可以使用预先准备好的语句,然后跳过某些字段或类似的内容?

如果在表定义中设置了默认值,则可以忽略insert中的值

有关默认值的详细信息,请查看以下页面:


看看ORM工具,使用ORM,您可以专注于数据结构,而不是它们的保存方式。我爱教条奥米昨天在读教条2的api。听起来很酷。但我认为在我的小小CMS系统中实现它是不值得的,因为它只有一个对象要存储到数据库中。因此@jmack如果我有这个:
$stmt=$DB->prepare(“插入到页面(用户id、页面名称、seo页面标题、seo描述、seo关键字、seo机器人、seo规范、页面类型)值(?,,,,,,,,,,,,,,,,,)”
如果我们说我没有最后两个字段的值,那么您如何将参数绑定到它?您只需完全忽略最后两个字段即可。所以类似于
$stmt=$db->prepare(“插入页面(用户id、页面名称、搜索引擎优化页面标题、搜索引擎优化描述、搜索引擎优化关键词、搜索引擎优化机器人)值(?,,,,,,,,,,?)”
但是你仍然需要使用像createInsertStm($arr,$table)这样的函数来进行声明。如果您有时有最后的字段,那么som有时没有