Php 如何按id查询数据库中的所有条目?
我一直在关注关于构建登录表单的教程。一切都很顺利 现在我正在尝试重用代码。我遇到的问题是,当我试图查询数据库中的所有条目以获得网站总数时。你能给我个建议吗 这是我的count函数(这是我在获取数据库中用于分页的条目总数时遇到的问题): 如果我用这个,我会列出所有的IDPhp 如何按id查询数据库中的所有条目?,php,mysql,sql,Php,Mysql,Sql,我一直在关注关于构建登录表单的教程。一切都很顺利 现在我正在尝试重用代码。我遇到的问题是,当我试图查询数据库中的所有条目以获得网站总数时。你能给我个建议吗 这是我的count函数(这是我在获取数据库中用于分页的条目总数时遇到的问题): 如果我用这个,我会列出所有的ID function get_all_websites(){ $all = array(); $db = DB::getInstance(); $all = $db->query("SELECT *
function get_all_websites(){
$all = array();
$db = DB::getInstance();
$all = $db->query("SELECT * FROM website");
if(!$all->count()){
echo 'No Websites available. Please check back later.';
} else {
foreach($all->results() as $all){
echo $all->id;
}
}
}
数据库类
class DB{
private static $_instance = null;
private $_pdo,
$_query,
$_error = false,
$_results,
$_count = 0;
private function __construct(){
try {
$this->_pdo = new PDO('mysql:host=' .
Config::get('mysql/host') . ';dbname=' .
Config::get('mysql/db'),
Config::get('mysql/username'),
Config::get('mysql/password'));
} catch(PDOException $e){
die($e -> getMessage());
}
}
public static function getInstance(){
if(!isset(self::$_instance)) {
self::$_instance = new DB();
}
return self::$_instance;
}
public function query($sql, $params = array()){
$this->_error = false;
// Check if query has been prepared properly
if($this->_query = $this->_pdo->prepare($sql)){
$x = 1;
if(count($params)){
foreach($params as $param){
$this->_query->bindValue($x, $param);
$x++;
}
}
// If the query has been prepared successfuly, store the result
if($this->_query->execute()){
$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
$this->_count = $this->_query->rowCount();
} else {
$this->_error = true;
}
}
return $this;
}
public function action($action, $table, $where = array()){
if(count($where) === 3){
$operators = array('=', '>', '<', '>=', '<=');
$field = $where[0];
$operator = $where[1];
$value = $where[2];
if(in_array($operator, $operators)){
$sql = "{$action} FROM {$table} WHERE {$field} {$operator} ?";
if(!$this->query($sql, array($value))->error()){
return $this;
}
}
}
return false;
}
// QUERYING DATA FROM DATABASE
public function get($table, $where){
return $this->action('SELECT *', $table, $where);
}
// DELETING DATA FROM DATABASE
public function delete($table, $where){
return $this->action('DELETE', $table, $where);
}
// INSERTING DATA INTO DATABASE
public function insert($table, $fields = array()){
$keys = array_keys($fields);
$values = '';
$x = 1;
foreach($fields as $field){
$values .= "?";
if($x < count($fields)){
$values .= ', ';
}
$x++;
}
$sql = "INSERT INTO {$table} (`" . implode('`, `', $keys) . "`) VALUES({$values})";
if(!$this->query($sql, $fields)->error()){
return true;
}
return false;
}
public function results(){
return $this->_results;
}
public function update($table, $id, $fields){
$set = '';
$x = 1;
foreach($fields as $name => $value){
$set .= "{$name} = ?";
if($x < count($fields)){
$set .= ', ';
}
$x++;
}
$sql = "UPDATE {$table} SET {$set} WHERE id = {$id}";
if(!$this->query($sql, $fields)->error()){
return true;
}
return false;
}
public function first(){
return $this->results()[0];
}
public function error(){
return $this->_error;
}
public function count(){
return $this->_count;
}
}
classdb{
私有静态$\u实例=null;
私人$(pdo),
$\u查询,
$\u错误=false,
$\u结果,
$\计数=0;
私有函数_u构造(){
试一试{
$this->_pdo=new pdo('mysql:host=')。
Config::get('mysql/host')。;dbname='。
Config::get('mysql/db'),
Config::get('mysql/username'),
Config::get('mysql/password');
}捕获(PDO$e){
死亡($e->getMessage());
}
}
公共静态函数getInstance(){
if(!isset(self:$\实例)){
self::$_instance=new DB();
}
返回self::$\u实例;
}
公共函数查询($sql,$params=array()){
$this->_error=false;
//检查查询是否已正确准备
如果($this->_query=$this->_pdo->prepare($sql)){
$x=1;
如果(计数($params)){
foreach($params作为$param){
$this->_query->bindValue($x,$param);
$x++;
}
}
//如果查询准备成功,请存储结果
如果($this->\u query->execute()){
$this->\u results=$this->\u query->fetchAll(PDO::FETCH\u OBJ);
$this->_count=$this->_query->rowCount();
}否则{
$this->_error=true;
}
}
退还$this;
}
公共函数action($action,$table,$where=array()){
如果(计数($where)==3){
$operators=array(“=”、“>”、“=”、“此部分似乎不正确:
} else {
foreach($all->results() as $all){
$all->id = $all;
}
}
return $all;
但我不确定你想要什么
我们可以将每个id附加到名为$AllWebsiteID的数组中:
} else {
foreach($all->results() as $all){
$allWebsiteIds[] = $all->id;
}
}
return $allWebsiteIds;
这可能会满足您的需要。为什么不使用select来计算行数
从网站中选择COUNT(1);SQL为计算表中的行提供内置支持
SELECT COUNT(*) FROM ...
这是高度优化的,避免了将每一行加载到PHP内存中
此外,请密切注意循环的构造;特别是它的含义:
foreach($foo as $foo)
作为你研究的一部分,你应该能够说出为什么这个表达几乎从来都不是你想要的
有一条更广泛的规则:永远不要改变你正在迭代的内容。你不会说问题出在哪里。你会收到错误消息吗?空白页吗?总数错误吗?问题出在get_all_网站()中的我的foreach循环中函数。我不知道如何只检索数据库中的一些总条目。我们是否会错过询问为什么不使用SELECT COUNT(*)的要点从…
?您的代码中的技术是非常过分的。关于您的循环,您正在将$all变量重新分配给它的每个成员,然后将每个成员作为id属性分配给它自己……我怀疑这不是您的意图。我仍然是一名大学生,正在学习PHP,因为这是我选择的语言。我不是php pro@ctraheyIt只列出数据库中的所有ID。好的,这应该将它们放入一个数组中。然后如何计算数组中的项目?使用php count()?如果我听从您的建议,我会得到以下错误:未定义属性:DB:$ID in/Users/web/Sites/classes/Websites.php第30行:$allWebsiteIds[]=$all->id;是的,这很有意义。但是我是否仍然必须在foreach look after中使用SELECT COUNT(*)FROM…?否。将聚合一个COUNT
查询,并且(默认情况下)只有一个结果行。
foreach($foo as $foo)