Может кто-нибудь показать мне, как исправить этот запрос, который продолжает давать мне ошибку синтаксиса sql?
Неустранимая ошибка: Uncaught mysqli_sql_exception: у вас есть ошибка в вашем синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MariaDB, чтобы найти правильный синтаксис для использования рядом с '?'в строке 1 в C: \ xampp \ htdocs \ test \ browsing_histories.php: 38 Трассировка стека: # 0 C: \ xampp \ htdocs \ test \ browsing_histories.php (38): запрос mysqli-> ('SELECT * FROM b... ') # 1 {main} выбрасывается в C: \ xampp \ htdocs \ test \ browsing_histories.php в строке 38
Мне нужно сделать это так, чтобы мне не нужно было писать сотнизапросов, кроме одного.Сотни запросов, где каждый для каждого столбца запросов.Например,
$total_pages = $conn->query("SELECT * FROM browsing_histories WHERE USERNAME = ? ")->num_rows;
$total_pages = $conn->query("SELECT * FROM browsing_histories WHERE FIRST_NAME = ? ")->num_rows;
$total_pages = $conn->query("SELECT * FROM browsing_histories WHERE GENDER = ? ")->num_rows;
$total_pages = $conn->query("SELECT * FROM browsing_histories WHERE AGE-RANGE = ? ")->num_rows;
И так далее ...
Один запрос должен делать это так, как мы можем с не подготовленными операторами.Следовательно, сделал это следующим образом:
$stmt = $conn->prepare('SELECT * FROM browsing_histories WHERE $query_type = ?
ORDER BY id LIMIT ?,?');
Полный контекст:
$query_type = $_GET['query_type'];
//If $_GET['query_type']) is empty then show error as it must be set.
if(!isset($_GET['query_type']) && empty($_GET['query_type']))
{
echo "Invalid Query!";
}
//If $_GET['query_type']) is full with value other than wild-card or "All"
or "all" then make speccific query.
elseif($query_type != 'all' OR $query_type != 'All' OR $query_type != '*')
{
${$query_type} = $_GET[$_GET['query_type']];
$followed_word = ${$query_type}; //Same as: $_GET[$_GET['query_type']];
$total_pages = $conn->query("SELECT * FROM browsing_histories WHERE
$query_type = ?")->num_rows;
//Make the query.
$stmt = $conn->prepare('SELECT * FROM browsing_histories WHERE
$query_type = ? ORDER BY id LIMIT ?,?');
$stmt->bind_param('sii', $query_type, $calc_page, $num_results_on_page);
}
else //Make general query or query for all records.
{
//Grab "all records" from the table.
//Get the total number of records from the table:
"browsing_histories".
$total_pages = $conn->query("SELECT * FROM browsing_histories")-
>num_rows;
//Make the query.
$stmt = $conn->prepare('SELECT * FROM browsing_histories ORDER BY id
LIMIT ?,?');
$stmt->bind_param('ii', $num_results_on_page);
}
$stmt->execute();
ПРИМЕЧАНИЕ. Даже когда я меняю тип $ query_type в подготовленном запросе оператора на фактическое имя столбца, такое как "username "then я все еще получаю ту же ошибку.
$stmt = $conn->prepare('SELECT * FROM browsing_histories WHERE username =
?
ORDER BY id LIMIT ?,?');
EDIT 1: исправлен мой код для следования, но не повезло!
$query_type = $_GET['query_type'];
//If $_GET['query_type']) is empty then show error as it must be set.
if(!isset($_GET['query_type']) && empty($_GET['query_type']))
{
echo "Invalid Query!";
}
//If $_GET['query_type']) is full with value other than wild-card or
"All" or "all" then make speccific query.
elseif($query_type != 'all' OR $query_type != 'All' OR $query_type !=
'*')
{
${$query_type} = $_GET[$_GET['query_type']];
$followed_word = ${$query_type}; //Same as:
$_GET[$_GET['query_type']];
$total_pages = $conn->query("SELECT * FROM browsing_histories WHERE
username = ?")->num_rows;
//Make the query.
$stmt = $conn->prepare('SELECT * FROM browsing_histories WHERE
username = ? ORDER BY id LIMIT ?,?');
$stmt->bind_param('sii', $query_type, $calc_page,
$num_results_on_page);
}
else //Make general query or query for all records.
{
//Grab "all records" from the table.
//Get the total number of records from the table:
"browsing_histories".
$total_pages = $conn->query("SELECT * FROM browsing_histories")-
>num_rows;
//Make the query.
$stmt = $conn->prepare('SELECT * FROM browsing_histories ORDER BY id
LIMIT ?,?');
$stmt->bind_param('ii', $calc_page, $num_results_on_page);
}
$stmt->execute();
EDIT 2: вот мое последнее обновление.Проблема остается.Закомментированные запросы - те, с которыми я экспериментировал.Все они показывают ошибку один и тот же.Некомментированный тоже показывает ошибку.
$query_type = $_GET['query_type'];
//If $_GET['query_type']) is empty then show error as it must be set.
if(!isset($_GET['query_type']) && empty($_GET['query_type']))
{
echo "Invalid Query!";
}
//If $_GET['query_type']) is full with value other than wild-card or
"All" or "all" then make speccific query.
elseif($query_type != 'all' OR $query_type != 'All' OR $query_type !=
'*')
{
${$query_type} = $_GET[$_GET['query_type']];
$followed_word = ${$query_type}; //Same as:
$_GET[$_GET['query_type']];
//$total_pages = $conn->query("SELECT * FROM browsing_histories WHERE
? = ?")->num_rows;
//$total_pages = $conn->query("SELECT * FROM browsing_histories WHERE
\"$query_type\" = ?")->num_rows;
$total_pages = $conn->query("SELECT * FROM browsing_histories WHERE
$query_type = ?")->num_rows;
$stmt->bind_param('i', ${$query_type});
$stmt->execute();
//Make the query.
//$stmt_2 = $conn->prepare("SELECT * FROM browsing_histories WHERE ?
= ? ORDER BY id LIMIT ?,?");
//$stmt_2 = $conn->prepare("SELECT * FROM browsing_histories WHERE
\"$query_type\" = ? ORDER BY id LIMIT ?,?");
//$stmt_2 = $conn->prepare("SELECT * FROM browsing_histories WHERE
$query_type = ? ORDER BY id LIMIT ?,?");
$stmt_2 = $conn->prepare("SELECT * FROM browsing_histories WHERE
username = ? ORDER BY id LIMIT ?,?");
//$stmt_2->bind_param('sii', $query_type, ${$query_type}, $calc_page,
$num_results_on_page);
$stmt_2->bind_param('sii', ${$query_type}, $calc_page,
$num_results_on_page);
}
else //Make general query or query for all records.
{
//Grab "all records" from the table.
//Get the total number of records from the table:
"browsing_histories".
$total_pages = $conn->query("SELECT * FROM browsing_histories")-
>num_rows;
//Make the query.
$stmt = $conn->prepare('SELECT * FROM browsing_histories ORDER BY
id LIMIT ?,?');
$stmt->bind_param('ii', $calc_page, $num_results_on_page);
}
$stmt->execute();