用PHP编程CRUD函数

时间:2014-02-06 21:28:14

标签: php mysql

我正在用PHP编写一些CRUD函数(面向对象),我遇到了的麻烦。 该功能可以正常工作。请查看并提前阅读我遇到的实际问题。以下是功能:

<?php
function db_s(
            $table,
            $condition = array(),
            $limit = '',
            $order = array(),
            $group = array(),
            $return_query_string = false
) {
    $sql = '
        SELECT
            *
        FROM
            `'. $table .'`
    ';
    if (is_array($condition)) {
        if (count($condition) > 1) {
            $sql .= '
                    WHERE
                ';
            $sql .= implode(' AND ', $condition);
        }
        elseif (count($condition > 0)) { $sql .= ' WHERE '. $condition[0] .' '; }
    }
    elseif ($condition != '' && is_string($condition)) { $sql .= ' WHERE '. $condition .' '; }

    if (!empty($group)) {
        $sql .= '
                GROUP BY
            ';
        $sql .= implode(', ', $group);
    }
    if (!empty($order)) {
        $sql .= '
                ORDER BY
            ';
        $sql .= implode(', ', $order);
    }
    if ($limit != '') {
        $sql .= '
                LIMIT
                    '. $limit .'
            ';
    }
    //print '<pre>'. $sql .'</pre>';
    $query = mysql_query($sql) OR die(mysql_error() .'<p><pre>'. $sql .'</pre></p>');
    if ($return_query_string) { return $sql; }
    else { return $query; }
} // end db_s() function
?>

以下是一些如何使用它的例子:

<?php
$results = db_s('users', 'active = 1');
while($row = mysql_fetch_assoc($results)) {
    // do cool stuff here
}
?>

<?php
$results = db_s('messages', array('user_id = 1512', 'date < "2014-05-01"'), 10);
while($row = mysql_fetch_assoc($results)) {
    // do cool stuff here
}
?>

<?php
$results = db_s('messages', array('user_id = 1512', 'date < "2014-05-01"'), 10, 'date DESC');
while($row = mysql_fetch_assoc($results)) {
    // do cool stuff here
}
?>

<?php
$results = db_s('posts', 'unread = 1', '', 'date ASC', 'user_id', true);
print '<pre>'; print_r($results); print '</pre>';
?>

所有这一切都很好(等待上面的任何语法错误但功能正常)。 问题在于我想要使用该功能。正如您在上面所看到的,我必须首先建立$results变量。 然后我必须将整个事情放入while循环$row = mysql_fetch_assoc($results)。这对我来说似乎太过分了。为了真正让这个功能对我有用,我真的很想重写它,所以我可以像这样使用它:

<?php
while ($row = db_s('messages', array('user_id = 1512', 'date < "2014-05-01"'), 10, 'date DESC')) {
    // do cool stuff here
}
?>

或者像这样:

<?php
while ($row = db_s('users', 'active = 1')) {
    // do cool stuff here
}
?>

为了做到这一点,我尝试重写函数的末尾(实际返回查询的部分),但我似乎无法让它正常工作。我尝试过这样的事情

    }
    //print '<pre>'. $sql .'</pre>';
    $query = mysql_query($sql) OR die(mysql_error() .'<p><pre>'. $sql .'</pre></p>');
    if ($return_query_string) { return $sql; }
    else { return mysql_fetch_array($query); }  //<--- this line is modified
} // end db_s() function
?>

但它只是不起作用。不幸的是,结果是......参差不齐......这样使用的时候。通常它会返回比它应该更多的结果,并且它只会多次吐出第一个结果... 我确实重写了while()循环,因此它将正确使用函数db_s()任何人都可以向我提供任何见解,为什么它不会像这样工作?或者,如何返回结果,以便我可以使用我想要的功能?任何帮助是极大的赞赏。提前谢谢!

1 个答案:

答案 0 :(得分:0)

您现在需要使用PDO或MySQLI。解决方案类似,或者您可以对这些库使用* _fetch_all()。

对于函数return:

$query = mysql_query($sql) OR die(mysql_error() .'<p><pre>'. $sql .'</pre></p>');

if($return_query_string) {
    return $sql;
} else { 
    while($result[] = mysql_fetch_array($query)) {}
    return $result;
}

然后像这样使用它:

foreach(db_s('users', 'active = 1') as $row) {
    //do cool stuff here
}

我不赞同功能或代码概念,只是回答这个问题。