Я придумал несколько более длинную версию, которая пытается создать полное имя метода, включая модуль и класс.
https://gist.github.com/2151727 (rev 9cccbf)
# Public Domain, то есть не стесняйтесь копировать / вставлять # Считается, что взлом в Python 2 import проверяет def caller_name (skip = 2): "" "Получить имя вызывающего абонента в формате module.class.method` skip` указывает, сколько уровней стека пропустить при получении имени вызывающего абонента. skip = 1 означает «кто меня звонит», skip = 2 «кто звонит моему абоненту» и т. д. Пустая строка возвращается, если пропущенные уровни превышают высоту стека »« »stack = inspect.stack () start = 0 + skip if len ( стек) start + 1: return '' parentframe = stack [start] [0] name = [] module = inspect.getmodule (parentframe) # `modname` может быть None, когда кадр выполняется непосредственно в консоли # TODO (techtonik): рассмотрите возможность использования __main__ if module: name.append (module .__ name__) # обнаружить имя класса, если «self» в parentframe.f_locals: # Я не знаю, какой способ обнаружить вызов из метода объекта # XXX: похоже, нет способа обнаружить статический вызов метода - это будет # просто вызов функции name.append (parentframe.f_locals ['self'] .__ class __.__ name__) codename = parentframe.f_code.co_name, если codename! = '& lt; module & gt;': # верхний уровень обычно name.append (кодовое имя) # функция или метод ## Избегайте циклических ссылок и исправлений кадров # https://docs.python.org/2.7/library/inspect.html#the-interpreter-stack del parentframe, возврат в стеке " . ". join (name)
Используйте это:
mysqli_query($this->db_link, $query) or die(mysqli_error($this->db_link));
# mysqli_query($link,$query) returns 0 if there's an error.
# mysqli_error($link) returns a string with the last error message
Вы также можете использовать это для печати кода ошибки.
echo mysqli_errno($this->db_link);
использовать функцию die ()
or die(mysql_error());
mysqli_*
, постарайтесь не направить его на использование mysql_*
.
– David
1 September 2012 в 13:24
Я использую следующее, чтобы включить все отчеты об ошибках для MySQLi
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
* ПРИМЕЧАНИЕ: не используйте это в рабочей среде.
Одна полезная строка кода для вас была бы
$sql = "Your SQL statement here";
$result = mysqli_query($sql) or trigger_error("Query Failed! SQL: $sql - Error: ".mysqli_error(), E_USER_ERROR);
Этот метод лучше, чем умереть, потому что вы можете использовать его для разработки AND production, это постоянное решение.
mysql_query("YOUR QUERY") OR die("Error:".mysql_error());
mysqli_query
. Безответственно предположить, что он регрессирует до mysql_query
.
– David
1 September 2012 в 13:25
предложения не работают, потому что они предназначены для стандартного драйвера mysql, а не для mysqli,
$this->db_link->error
содержит ошибку, если это произошло
или
mysqli_error($this->db_link)
будет работать
Попробуйте что-то вроде этого:
$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;
}