Как отобразить ошибку MySQL в PHP для длинного запроса, который зависит от ввода пользователя?
В PHP я пытаюсь выполнить длинный запрос MySQL, который зависит от ввода пользователя. Однако мой запрос не выполняется со следующим сообщением
"Query Failed".
На самом деле я печатал это сообщение всякий раз, когда запрос не удался, но мне трудно найти причину этого сбоя. К сожалению, я не смог найти его, потому что ошибка не указана на веб-странице. Есть ли способ отобразить сообщение об ошибке, которое вызвало сбой на веб-странице?
Вот мой код,
$from = "Findings";
$where = "";
if ($service != null)
{
$from = $from . ", ServiceType_Lookup";
$where= "Findings.ServiceType_ID= ServiceType_Lookup.ServiceType_ID AND ServiceType_Name= ". $service;
if ($keyword != null)
$where= $where . " AND ";
}
if ($keyword != null)
{
$where= $where . "Finding_ID LIKE '%$keyword%' OR
ServiceType_ID LIKE '%$keyword%' OR
Title LIKE '%$keyword%' OR
RootCause_ID LIKE '%$keyword%' OR
RiskRating_ID LIKE '%$keyword%' OR
Impact_ID LIKE '%$keyword%' OR
Efforts_ID LIKE '%$keyword%' OR
Likelihood_ID LIKE '%$keyword%' OR
Finding LIKE '%$keyword%' OR
Implication LIKE '%$keyword%' OR
Recommendation LIKE '%$keyword%' OR
Report_ID LIKE '%$keyword%'";
}
$query = "SELECT Finding_ID,
ServiceType_ID,
Title,
RootCause_ID,
RiskRating_ID,
Impact_ID,
Efforts_ID,
Likelihood_ID,
Finding,
Implication,
Recommendation,
Report_ID FROM ".$from . " WHERE " . $where;
echo "wala 2eshiq";
$this->result = $this->db_link->query($query);
if (!$this->result) {
printf("Query failed: %s\n", mysqli_connect_error());
exit;
}
$r = mysqli_query($this->db_link, $query);
if ($r == false)
printf("error: %s\n", mysqli_errno($this->db_link));
Ответы
Ответ 1
Используйте это:
mysqli_query($this->db_link, $query) or die(mysqli_error($this->db_link));
# mysqli_query($link,$query) returns 0 if there an error.
# mysqli_error($link) returns a string with the last error message
Вы также можете использовать это для печати кода ошибки.
echo mysqli_errno($this->db_link);
Посмотрите here и здесь
Ответ 2
Используйте функцию die():
or die(mysql_error());
Ответ 3
Я использую следующее, чтобы включить все отчеты об ошибках для MySQLi
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
* ПРИМЕЧАНИЕ. не используйте это в рабочей среде.
Ответ 4
mysql_query("YOUR QUERY") OR die("Error:".mysql_error());
Ответ 5
Предложения не работают, потому что они для стандартного драйвера MySQL, а не для MySQL:
$this->db_link->error
содержит ошибку, если она произошла
Или
mysqli_error($this->db_link)
будет работать.
Ответ 6
Попробуйте что-то вроде этого:
$link = @new mysqli($this->host, $this->user, $this->pass)
$statement = $link->prepare($sqlStatement);
if(!$statement)
{
$this->debug_mode('query', 'error', '#Query Failed<br/>' . $link->error);
return false;
}
Ответ 7
Одна полезная строка кода для вас будет:
$sql = "Your SQL statement here";
$result = mysqli_query($this->db_link, $sql) or trigger_error("Query Failed! SQL: $sql - Error: ".mysqli_error($this->db_link), E_USER_ERROR);
Этот метод лучше, чем die
, потому что вы можете использовать его для разработки и производства. Это постоянное решение.