本文整理汇总了PHP中Drupal\Core\Database\Connection::expandArguments方法的典型用法代码示例。如果您正苦于以下问题:PHP Connection::expandArguments方法的具体用法?PHP Connection::expandArguments怎么用?PHP Connection::expandArguments使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Drupal\Core\Database\Connection
的用法示例。
在下文中一共展示了Connection::expandArguments方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: expandArguments
/**
* {@inheritdoc}
*/
protected function expandArguments(&$query, &$args)
{
$modified = parent::expandArguments($query, $args);
// The PDO SQLite driver always replaces placeholders with strings, which
// breaks numeric expressions (e.g., COUNT(*) >= :count). Replace numeric
// placeholders in the query to work around this bug.
// @see http://bugs.php.net/bug.php?id=45259
if (empty($args)) {
return $modified;
}
// Check if $args is a simple numeric array.
if (range(0, count($args) - 1) === array_keys($args)) {
// In that case, we have unnamed placeholders.
$count = 0;
$new_args = array();
foreach ($args as $value) {
if (is_float($value) || is_int($value) || is_numeric($value)) {
if (is_float($value)) {
// Force the conversion to float so as not to loose precision
// in the automatic cast.
$value = sprintf('%F', $value);
}
$query = substr_replace($query, $value, strpos($query, '?'), 1);
} else {
$placeholder = ':db_statement_placeholder_' . $count++;
$query = substr_replace($query, $placeholder, strpos($query, '?'), 1);
$new_args[$placeholder] = $value;
}
}
$args = $new_args;
$modified = TRUE;
} else {
foreach ($args as $placeholder => $value) {
if (is_float($value) || is_int($value) || is_numeric($value)) {
if (is_float($value)) {
// Force the conversion to float so as not to loose precision
// in the automatic cast.
$value = sprintf('%F', $value);
}
// We will remove this placeholder from the query as PDO throws an
// exception if the number of placeholders in the query and the
// arguments does not match.
unset($args[$placeholder]);
// PDO allows placeholders to not be prefixed by a colon. See
// http://marc.info/?l=php-internals&m=111234321827149&w=2 for
// more.
if ($placeholder[0] != ':') {
$placeholder = ":{$placeholder}";
}
// When replacing the placeholders, make sure we search for the
// exact placeholder. For example, if searching for
// ':db_placeholder_1', do not replace ':db_placeholder_11'.
$query = preg_replace('/' . preg_quote($placeholder, '/') . '\\b/', $value, $query);
$modified = TRUE;
}
}
}
return $modified;
}