我想编写一个函数,它包含两个参数:一个是表名,另一个是键的关联数组。现在我有了一个功能:
//返回一个包含$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)是什么意思?我很困惑。谢谢!
发布于 2014-04-22 06:31:43
您的代码可以解决,但我更愿意告诉您不要试图解决特定的代码,因为这是一个旧的过时的解决方案,您想尽快删除。
您想要做的是使用PDO适配器http://php.net/manual/en/class.pdo.php。
这样做的好处是,您可以从隐藏在用户输入中的所有坏处中获得保护,并且您还可以得到许多很好的抽象来解决您所描述的问题。
这是我在代码中用来做这个的函数,它看起来可能有点高级,但是如果您查阅了手册,您就不会有解决它的问题。
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
发布于 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)永远不会满足。
还请记住,如果值是一个字符串,那么我们需要在它们周围有引号,所以请尝试下面的查询。
$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]."' ";
}
} 发布于 2014-04-22 06:34:50
试试这个:
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如果这有帮助的话,不要放弃接受答案。
https://stackoverflow.com/questions/23211823
复制相似问题