本文整理汇总了PHP中WT_DB::quote方法的典型用法代码示例。如果您正苦于以下问题:PHP WT_DB::quote方法的具体用法?PHP WT_DB::quote怎么用?PHP WT_DB::quote使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WT_DB
的用法示例。
在下文中一共展示了WT_DB::quote方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: search_repos
function search_repos($query, $geds, $match)
{
global $GEDCOM;
// No query => no results
if (!$query) {
return array();
}
// Convert the query into a SQL expression
$querysql = array();
// Convert the query into a regular expression
$queryregex = array();
foreach ($query as $q) {
$queryregex[] = preg_quote(WT_I18N::strtoupper($q), '/');
$querysql[] = "o_gedcom LIKE " . WT_DB::quote("%{$q}%") . " COLLATE '" . WT_I18N::$collation . "'";
}
$sql = "SELECT o_id AS xref, o_file AS gedcom_id, o_gedcom AS gedcom FROM `##other` WHERE (" . implode(" {$match} ", $querysql) . ") AND o_type='REPO' AND o_file IN (" . implode(',', $geds) . ')';
// Group results by gedcom, to minimise switching between privacy files
$sql .= ' ORDER BY gedcom_id';
$list = array();
$rows = WT_DB::prepare($sql)->fetchAll();
$GED_ID = WT_GED_ID;
foreach ($rows as $row) {
// Switch privacy file if necessary
if ($row->gedcom_id != $GED_ID) {
$GEDCOM = get_gedcom_from_id($row->gedcom_id);
load_gedcom_settings($row->gedcom_id);
$GED_ID = $row->gedcom_id;
}
// SQL may have matched on private data or gedcom tags, so check again against privatized data.
$record = WT_Individual::getInstance($row->xref, $row->gedcom_id, $row->gedcom);
// Ignore non-genealogical data
$gedrec = preg_replace('/\\n\\d (_UID|_WT_USER|FILE|FORM|TYPE|CHAN|REFN|RESN) .*/', '', $record->getGedcom());
// Ignore links and tags
$gedrec = preg_replace('/\\n\\d ' . WT_REGEX_TAG . '( @' . WT_REGEX_XREF . '@)?/', '', $gedrec);
// Ignore tags
$gedrec = preg_replace('/\\n\\d ' . WT_REGEX_TAG . ' ?/', '', $gedrec);
// Re-apply the filtering
$gedrec = WT_I18N::strtoupper($gedrec);
foreach ($queryregex as $regex) {
if (!preg_match('/' . $regex . '/', $gedrec)) {
continue 2;
}
}
$list[] = $record;
}
// Switch privacy file if necessary
if ($GED_ID != WT_GED_ID) {
$GEDCOM = WT_GEDCOM;
load_gedcom_settings(WT_GED_ID);
}
return $list;
}
示例2: individuals
/**
* Fetch a list of individuals with specified names
*
* To search for unknown names, use $surn="@N.N.", $salpha="@" or $galpha="@"
* To search for names with no surnames, use $salpha=","
*
* @param string $surn if set, only fetch people with this surname
* @param string $salpha if set, only fetch surnames starting with this letter
* @param string $galpha if set, only fetch given names starting with this letter
* @param bool $marnm if set, include married names
* @param bool $fams if set, only fetch individuals with FAMS records
* @param int $ged_id if set, only fetch individuals from this gedcom
*
* @return WT_Individual[]
*/
public static function individuals($surn, $salpha, $galpha, $marnm, $fams, $ged_id)
{
$sql = "SELECT i_id AS xref, i_file AS gedcom_id, i_gedcom AS gedcom, n_full " . "FROM `##individuals` " . "JOIN `##name` ON (n_id=i_id AND n_file=i_file) " . ($fams ? "JOIN `##link` ON (n_id=l_from AND n_file=l_file AND l_type='FAMS') " : "") . "WHERE n_file={$ged_id} " . ($marnm ? "" : "AND n_type!='_MARNM'");
if ($surn) {
$sql .= " AND n_surn COLLATE '" . WT_I18N::$collation . "'=" . WT_DB::quote($surn);
} elseif ($salpha == ',') {
$sql .= " AND n_surn=''";
} elseif ($salpha == '@') {
$sql .= " AND n_surn='@N.N.'";
} elseif ($salpha) {
$sql .= " AND " . self::_getInitialSql('n_surn', $salpha);
} else {
// All surnames
$sql .= " AND n_surn NOT IN ('', '@N.N.')";
}
if ($galpha) {
$sql .= " AND " . self::_getInitialSql('n_givn', $galpha);
}
$sql .= " ORDER BY CASE n_surn WHEN '@N.N.' THEN 1 ELSE 0 END, n_surn COLLATE '" . WT_I18N::$collation . "', CASE n_givn WHEN '@P.N.' THEN 1 ELSE 0 END, n_givn COLLATE '" . WT_I18N::$collation . "'";
$list = array();
$rows = WT_DB::prepare($sql)->fetchAll();
foreach ($rows as $row) {
$person = WT_Individual::getInstance($row->xref, $row->gedcom_id, $row->gedcom);
// The name from the database may be private - check the filtered list...
foreach ($person->getAllNames() as $n => $name) {
if ($name['fullNN'] == $row->n_full) {
$person->setPrimaryName($n);
// We need to clone $person, as we may have multiple references to the
// same person in this list, and the "primary name" would otherwise
// be shared amongst all of them.
$list[] = clone $person;
break;
}
}
}
return $list;
}
示例3: ListSHandler
/**
* XML <List> start element handler
*
* @see ListEHandler()
*
* @param array $attrs an array of key value pairs for the attributes
*/
function ListSHandler($attrs)
{
global $gedrec, $repeats, $repeatBytes, $list, $repeatsStack, $processRepeats, $parser, $vars, $sortby;
global $GEDCOM;
$processRepeats++;
if ($processRepeats > 1) {
return;
}
$match = array();
if (isset($attrs['sortby'])) {
$sortby = $attrs['sortby'];
if (preg_match("/\\\$(\\w+)/", $sortby, $match)) {
$sortby = $vars[$match[1]]['id'];
$sortby = trim($sortby);
}
} else {
$sortby = "NAME";
}
if (isset($attrs['list'])) {
$listname = $attrs['list'];
} else {
$listname = "individual";
}
// Some filters/sorts can be applied using SQL, while others require PHP
switch ($listname) {
case "pending":
$rows = WT_DB::prepare("SELECT xref, gedcom_id, CASE new_gedcom WHEN '' THEN old_gedcom ELSE new_gedcom END AS gedcom" . " FROM `##change`" . " WHERE (xref, change_id) IN (" . " SELECT xref, MAX(change_id)" . " FROM `##change`" . " WHERE status='pending' AND gedcom_id=?" . " GROUP BY xref" . " )")->execute(array(WT_GED_ID))->fetchAll();
$list = array();
foreach ($rows as $row) {
$list[] = WT_GedcomRecord::getInstance($row->xref, $row->gedcom_id, $row->gedcom);
}
break;
case "individual":
case "family":
$sql_col_prefix = substr($listname, 0, 1) . "_";
// i_ for individual, f_ for family, etc.
$sql_join = array();
$sql_where = array($sql_col_prefix . "file=" . WT_GED_ID);
$sql_order_by = array();
foreach ($attrs as $attr => $value) {
if (strpos($attr, "filter") === 0 && $value) {
// Substitute global vars
$value = preg_replace_callback('/\\$(\\w+)/', function ($matches) use($vars) {
return $vars[$matches[1]]['id'];
}, $value);
// Convert the various filters into SQL
if (preg_match('/^(\\w+):DATE (LTE|GTE) (.+)$/', $value, $match)) {
$sql_join[] = "JOIN `##dates` AS {$attr} ON ({$attr}.d_file={$sql_col_prefix}file AND {$attr}.d_gid={$sql_col_prefix}id)";
$sql_where[] = "{$attr}.d_fact='{$match[1]}'";
$date = new WT_Date($match[3]);
if ($match[2] == "LTE") {
$sql_where[] = "{$attr}.d_julianday2<=" . $date->minJD();
} else {
$sql_where[] = "{$attr}.d_julianday1>=" . $date->minJD();
}
if ($sortby == $match[1]) {
$sortby = "";
$sql_order_by[] = "{$attr}.d_julianday1";
}
unset($attrs[$attr]);
// This filter has been fully processed
} elseif ($listname == "individual" && preg_match('/^NAME CONTAINS (.*)$/', $value, $match)) {
// Do nothing, unless you have to
if ($match[1] != "" or $sortby == "NAME") {
$sql_join[] = "JOIN `##name` AS {$attr} ON (n_file={$sql_col_prefix}file AND n_id={$sql_col_prefix}id)";
// Search the DB only if there is any name supplied
if ($match[1] != "") {
$names = explode(" ", $match[1]);
foreach ($names as $name) {
$sql_where[] = "{$attr}.n_full LIKE " . WT_DB::quote("%{$name}%");
}
}
// Let the DB do the name sorting even when no name was entered
if ($sortby == "NAME") {
$sortby = "";
$sql_order_by[] = "{$attr}.n_sort";
}
}
unset($attrs[$attr]);
// This filter has been fully processed
} elseif ($listname == "individual" && preg_match('/^REGEXP \\/(.+)\\//', $value, $match)) {
$sql_where[] = "i_gedcom REGEXP '" . $match[1] . "'";
unset($attrs[$attr]);
// This filter has been fully processed
} elseif ($listname == "family" && preg_match('/^REGEXP \\/(.+)\\//', $value, $match)) {
$sql_where[] = "f_gedcom REGEXP '" . $match[1] . "'";
unset($attrs[$attr]);
// This filter has been fully processed
} elseif ($listname == "family" && preg_match('/^NAME CONTAINS (.+)$/', $value, $match)) {
// Eventually, family "names" will be stored in wt_name. Until then, an extra is needed....
$sql_join[] = "JOIN `##link` AS {$attr}a ON ({$attr}a.l_file={$sql_col_prefix}file AND {$attr}a.l_from={$sql_col_prefix}id)";
$sql_join[] = "JOIN `##name` AS {$attr}b ON ({$attr}b.n_file={$sql_col_prefix}file AND n_id={$sql_col_prefix}id)";
$sql_where[] = "{$attr}a.l_type=IN ('HUSB, 'WIFE')";
//.........这里部分代码省略.........