首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用php从表中选择值使用一些键

问如何使用php从表中选择值使用一些键
EN

Stack Overflow用户
提问于 2014-04-22 06:17:15
回答 4查看 129关注 0票数 0

我想编写一个函数,它包含两个参数:一个是表名,另一个是键的关联数组。现在我有了一个功能:

//返回一个包含$table中所有信息的assoc数组,用于给定的$keyValues function getAllFrom($table,$keyValues){ $qry="SELECT * FROM ". $table; $i=sizeof($keyValues); foreach($keyValues as $key=>$val) { if($i==1) $qry.=" WHERE ".$key."=".$keyValues[$key]." "; else $qry.=" AND ".$key."=".$keyValues[$key]." "; $i++; } //echo " query is : ".$qry; $result=mysql_query($qry) or die("Query $qry failed."); if($results= mysql_fetch_assoc($result)) return $results; else return false; } // end getAllFrom,但它不工作。有人能帮我修改一下吗,告诉我foreach($keyValues,$key=>$val)是什么意思?我很困惑。谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-04-22 06:31:43

您的代码可以解决,但我更愿意告诉您不要试图解决特定的代码,因为这是一个旧的过时的解决方案,您想尽快删除。

您想要做的是使用PDO适配器http://php.net/manual/en/class.pdo.php。

这样做的好处是,您可以从隐藏在用户输入中的所有坏处中获得保护,并且您还可以得到许多很好的抽象来解决您所描述的问题。

这是我在代码中用来做这个的函数,它看起来可能有点高级,但是如果您查阅了手册,您就不会有解决它的问题。

代码语言:javascript
复制
public function select( $table, array $conditions )
{
    $where = array();
    foreach ( $conditions as $col => $value )
    {            
        $input[":" . $col] = $value;
        $where[] = $col." = :" . $col;
    }

    $sql = "SELECT FROM " . $table
            . " WHERE ".implode("AND", $where);
    return (int) $this->prepare( $sql )
                    ->execute( $conditions )
                    ->getLastInsertId();
}

要理解Foreach循环,我将阅读手动http://php.net/manual/en/control-structures.foreach.php,另一个内置函数,我建议您查看http://php.net/manual/en/function.implode.php

票数 0
EN

Stack Overflow用户

发布于 2014-04-22 06:33:49

您已经正确地理解了foreach的概念($keyValues as $key=>$val),意思是如果存在关联数组,比如说

$testArr =数组(“key1”=>“val1”、"key2"=>"val2“、"key3"=>"val3")

然后在"foreach($keyValues as $key=>$val)“的每一个迭代中

$key取值key1、key2、key3和$val分别取val2、val2和val3。

您的查询无法工作,因为$i最初的值不为1,但它将具有关联数组的长度,也就是说,如果采用$testArr,那么它将有$i = 3。

$qry =和key1 = val1和key2 = val2和key3 =val3

,因为if($i == 1)永远不会满足。

还请记住,如果值是一个字符串,那么我们需要在它们周围有引号,所以请尝试下面的查询。

代码语言:javascript
复制
 $i=1;
 foreach($keyValues as $key=>$val)
 {
     if($i==1) 
     {
        $qry.=" WHERE  ".$key."='".$keyValues[$key]."' ";   //the ' have to be included if value is a string and not number
        $i = 0;
     }
     else
     {
       $qry.=" AND ".$key."='".$keyValues[$key]."' ";
     }

} 
票数 0
EN

Stack Overflow用户

发布于 2014-04-22 06:34:50

试试这个:

代码语言:javascript
复制
getAllFrom($table,$keyValues){
        $qry="SELECT * FROM ". $table;
        $i=0;
        if(count($keyValues > 0)){
            foreach($keyValues as $key=>$val) {
               if($i==0) $qry.=" WHERE  ".$key."=".$val." ";
               else $qry.=" AND ".$key."=".$val." ";
               $i++;
            } 
        }
        //echo " query is :   ".$qry;
        $result=mysql_query($qry) or die("Query $qry failed."); 
        if($results= mysql_fetch_assoc($result))
            return $results;
        else return false;
    } // end getAllFrom

如果这有帮助的话,不要放弃接受答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23211823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档