Я переписываю файл, который будет динамически создавать запросы для поиска и сопоставления любого слова в строке, переданной событием ajax ...
Я не могу заставить вещь вернуть данные. Он действует так, как будто все работает отлично, но это не так. Все, что я получаю в firebug - это успех: правда ... что хорошо, потому что это означает, что ошибки не было, но мои результаты SQL не передаются.
Я знаю, что этот код будет повсеместно для вас, ребята, но он не работает ...
Я потратил большую часть дня на доработку этого кода, поэтому он пока не очень красивый и не идеальный, я просто хочу, чтобы он снова возвращал результаты поиска ...
Билл, если ты читаешь это, у меня не было возможности посмотреть альтернативы% LIKE, которые ты предложил на прошлой неделе, которые ... все еще ждали твою книгу по почте.
Извините, что бросил тонну кода на вас, ребята, но я просто не вижу, что здесь не так.
function CreateOptions($columns, $num_elements, $condition="AND") {
$colcount = count($columns);
$optionString = " ";
for ($ii=0; $ii < $num_elements; $ii++) {
if ($ii > 0)
$optionString .= " AND (";
for ($i=0; $i<$colcount; $i++) {
if ($i>0)
$optionString .= " OR ";
$optionString .= $columns[$i] . " LIKE '%:search$ii%'";
}
//$optionString .= ")";
}
return $optionString;
}
include_once('../sys/core/init.inc.php');
$json = array();
$result = array();
if (isset($_POST['searchTerm'])){
try {
$search = trim($_POST['searchTerm']);
$search = preg_replace('/\s+/', ' ', $search);
$search = explode(" ", $search);
$num_search_elements = count($search);
switch($_POST['category']) {
case ("account"):
$querySyntax = "SELECT
idAccount,
FirstName,
LastName,
Email,
Phone,
CCCity,
db_name.states.Abbreviation
FROM
db_name.account Right Join
db_name.states On
db_name.account.CCState =
db_name.states.ID
WHERE";
$cols = Array ("FirstName", "LastName", "Phone", "Email", "idAccount");
$querySyntax .= CreateOptions($cols, $num_search_elements);
break;
default:
break;
}
$querySyntax .= " LIMIT 50";
// Build and run query (change to execute)
$dbs = $dbo->prepare($querySyntax);
for($i=0; $i<$num_search_elements; $i++) {
if ($dbs->bindValue(":search$i", $search[$i], (is_int($search[$i]) ? PDO::PARAM_INT : PDO::PARAM_STR))) {
// yea i know... nothing here its all below still
} else {
die("BIND_ERROR");
}
}
$dbs->execute();
// Put the array together
$search_results = $dbs->fetchAll(PDO::FETCH_ASSOC);
//print_r($search_results);
foreach($search_results as $col=>$val) {
$result[$i][$col] = $val;
$i++;
//echo "$col >> $val";
}
$stmt = null;
$result["success"] = true;
}
catch (PDOException $e) {
$result["success"] = false;
$result["error"] = $e->getMessage() . " >> SQL: $querySyntax";
}
} else {
$result["success"] = false;
$result["error"] = "INVALID DATA";
}
header('Content-type: application/json');
echo json_encode($result);
Вот сгенерированный SQL, взятый прямо из Firebug, когда я говорю ему повторить запрос:
SELECT
idAccount,
FirstName,
LastName,
Email,
Phone,
CCCity,
db_name.states.Abbreviation
FROM
db_name.account Right Join
db_name.states On db_name.account.CCState =
db_name.states.ID
WHERE
FirstName LIKE '%:search0%' OR
LastName LIKE '%:search0%' OR
phone LIKE '%:search0%' OR
email LIKE '%:search0%' OR
idAccount LIKE '%:search0%'
LIMIT 50
замените: search0 на "mar", вы получаете это из моей базы данных в терминале и phpmyadmin:
1 Mar <my real name> myemail@email 1231231234 City FL
2 Martin Short mshort@movies.com 2147483647 Beverly Hills CA
4 Martin Short mshort@email.com 2146791243 Beverly Hills CA
5 Martin Short mshort@movies.coms 2146791243 Beverly Hills CA