由于我的声誉较低,我无法直接发表评论。因此,将其想象为对 2013 年 1 月 19 日 15:58 发布的 Ragen Dazs 的回复。我知道这个话题已经有几天了,但如果像我这样的人通过谷歌搜索偶然发现这个......
但是,我在倒数第三行中遇到了正则表达式的问题。正如您在此示例中看到的那样,表达式还匹配以 00:00:00 作为时间的时间值。所以我建议使用这个例子中的正则表达式。
我也想知道是否有不必要的参数。我就是这样做的,它需要一个类似于上面示例中的 SQL 查询和一个参数数组(参见 php doc example #2 for PDOStatement::execute)。
/**
* Checks an parameter array against the sql query. it will tell you if there are any missing or needless parameters
*
* @param string $query Sql query
* @param array $parameters Parameters array
*
* @return bool|array Returns TRUE if no missing or needless parameters where found or a list with the missing
* or needless parameters
*/
private function checkParameters($query, $parameters)
{
$parameterTMP = $parameters;
$parameterCount = count($parameterTMP);
$regexMatchCounter = preg_match_all("/:[^]\\D\\w*/", $query, $regexMatches);
// if there are parameter in the $parameters array oder parameters in the sql query
if( $parameterCount > 0 || $regexMatchCounter > 0 )
{
// take every parameter found in the sql query
foreach( $regexMatches[ 0 ] as $parameterName )
{
// check if the required parameter is in the parameters array
if( !array_key_exists($parameterName, $parameters) )
{
// if it is not in the parameters array, add it to the list of missing parameters
// and continue with the next parameter from the query
$result[ 'missing' ][] = $parameterName;
continue;
}
// if the required parameter is in the parameter array, delete it from this array
// so we get a list of parameters that are needless
unset($parameterTMP[ $parameterName ]);
}
// check if there are (needless) parameters left
if( count($parameterTMP) > 0 )
{
// if so, add them to the list of needles parameters
$result[ 'needless' ] = array_keys($parameterTMP);
}
// if at this point $result is an array,
// some parameters are missing or needless, so we return the result list(s)
if( isset($result) && is_array($result) )
{
return $result;
}
}
// if we reach this point, no missing or needless parameters where found,
// you are good to go
return true;
}
如果有人希望它在出现问题时抛出异常,只需替换“return $result;”即可 使用以下代码行:
$missingCount = 0;
$missing = "";
$needlessCount = 0;
$needless = "";
if( array_key_exists('missing', $parameters) )
{
$missingCount = count($parameters[ 'missing' ]);
$missing = " (" . implode(", ", $parameters[ 'missing' ]) . ") ";
}
if( array_key_exists('needless', $parameters) )
{
$needlessCount = count($parameters[ 'needless' ]);
$needless = " (" . implode(", ", $parameters[ 'needless' ]) . ")";
}
$msg = "There are " . $missingCount . " missing parameter(s)".$missing." and ".$needlessCount." needless parameter(s)".$needless.".";
throw new Exception($msg);
玩得开心。