Вы неправильно передали параметры в функцию mysqli_real_escape_string (), прежде чем вставлять сообщение, вы должны поместить строку подключения, с которой вы получаете доступ к БД.
$connection=mysqli_connect("localhost","USER","PASSWORD","DB");
$nomeCantiere= mysqli_real_escape_string($connection, Вы неправильно передали параметры в функцию mysqli_real_escape_string (), прежде чем вставлять сообщение, вы должны поместить строку подключения, с которой вы получаете доступ к БД.
[110] ваша вторая попытка неверна, повторно использует мою строку кода во первых .. во время поста
POST['nomeCantiere']);
ваша вторая попытка неверна, повторно использует мою строку кода во первых .. во время поста
Как быстрый взлом это было намного легче сделать, чем я думал. Так как это быстрый взлом, я не перед тем как разыменовать массив, убедитесь, что трассировка стека достаточно глубока и т. д. Я вставил в конструктор моего подписанного апплета следующее:
log.info("Old security manager = " + System.getSecurityManager());
System.setSecurityManager(new SecurityManager() {
@Override
public void checkAccess(final Thread t) {
StackTraceElement[] list = Thread.currentThread().getStackTrace();
StackTraceElement element = list[3];
if (element.getMethodName().equals("interrupt")) {
log.info("CheckAccess to interrupt(Thread = " + t.getName() + ") - "
+ element.getMethodName());
dumpThreadStack(Thread.currentThread());
}
super.checkAccess(t);
}
});
и метод dumpThreadStack
выглядит следующим образом:
public static void dumpThreadStack(final Thread thread) {
StringBuilder builder = new StringBuilder('\n');
try {
for (StackTraceElement element : thread.getStackTrace()) {
builder.append(element.toString()).append('\n');
}
} catch (SecurityException e) { /* ignore */ }
log.info(builder.toString());
}
I Конечно, никогда не мог оставить это в рабочем коде, но мне было достаточно точно сказать, какой поток вызывал прерывание ()
, которого я не ожидал. То есть с этим кодом я получаю дамп стека для каждого вызова Thread.interrupt ()
.
()
, которого я не ожидал. То есть с этим кодом я получаю дамп стека для каждого вызова Thread.interrupt ()
. но мне было достаточно точно сказать, какой поток вызывал прерывание ()
, которого я не ожидал. То есть с этим кодом я получаю дамп стека для каждого вызова Thread.interrupt ()
. Я хотел бы взглянуть на AspectJ и его возможности для переноса вызовов методов. Здесь может помочь точка выполнения вокруг метода interrupt ()
.
Обратите внимание, что поскольку вы пытаетесь перехватить вызов системного метода Java (в отличие от кода вашего приложения) вышеуказанное может не подходить. Эта ветка , кажется, предполагает, что это возможно, но обратите внимание, что он создал тканый rt.jar.
Прежде чем пытаться что-то слишком дикое, рассматривали ли вы вопрос об использовании API отладки Java ? Я думаю, что захват метода MethodEntryEvents в Thread.interrupt () сделает это.
Да, это старый интерфейс, вы также должны проверить новый интерфейс JVM Tool .
Как уже говорили другие ... Если это единоразово, JVMTI, вероятно, является наиболее жестким путем. Тем не менее, также интересно использовать библиотеку asm и API инструментария для создания агента, который вставляет вызов статическому методу, созданному вами непосредственно перед вызовом Thread.interrupt () (или, возможно, изменяет Thread.interrupt ( ) способ сделать то же самое, я думаю, что вы можете сделать это).
Обе занимают некоторое время, чтобы учиться, но с ним довольно весело работать, и как только вы овладеете им, вы можете использовать их для самых разных забавных вещей в будущем :-) У меня нет хороших фрагментов для вставки прямо сейчас, но если вы посмотрите на ASM и, возможно, посмотрите на JIP для творческого использования ASM, я думаю, вы найдете вдохновение.
You could try also with JMX:
ManagementFactory.getThreadMXBean().getThreadInfo(aThreadID)
with the ThreadInfo object you can log:
EDIT
use getAllThreadIds() in order to obtain the list of live thread ids:
long[] ids = ManagementFactory.getThreadMXBean().getAllThreadIds();