我正在用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()
。任何人都可以向我提供任何见解,为什么它不会像这样工作?或者,如何返回结果,以便我可以使用我想要的功能?任何帮助是极大的赞赏。提前谢谢!
答案 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
}
我不赞同功能或代码概念,只是回答这个问题。