Я уверен, что путь к классам и путь поиска разделяемой библиотеки имеют мало общего с друг другом. Согласно JNI Book (который, по общему признанию, старый), в Windows, если вы не используете системное свойство java.library.path
, DLL должна находиться в текущем рабочем каталоге или в каталоге, указанном в Windows PATH
.
Обновление:
Похоже, что Oracle удалил PDF со своего веб-сайта. Я обновил ссылку выше, чтобы указать на экземпляр PDF, который живет в Техасском университете в Арлингтоне.
Кроме того, вы также можете прочитать HTML-версию Oracle спецификации JNI , Это живет в разделе Java 8 веб-сайта Java и, надеюсь, будет некоторое время.
Обновление 2:
По крайней мере, в Java 8 (я не знаю, t проверены более ранние версии), вы можете сделать:
java -XshowSettings:properties -version
, чтобы найти путь поиска совместно используемой библиотеки. Посмотрите на значение свойства java.library.path
в этом выходе.
Вот как вы правильно извлекаете результат
$param = "%{$_POST['user']}%";
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?");
$stmt->bind_param("s", $param);
$stmt->execute();
$stmt->bind_result($id,$username);
while ($stmt->fetch()) {
echo "Id: {$id}, Username: {$username}";
}
, или вы также можете сделать:
$param = "%{$_POST['user']}%";
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE ?");
$stmt->bind_param("s", $param);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_array(MYSQLI_NUM)) {
foreach ($row as $r) {
print "$r ";
}
print "\n";
}
Надеюсь, вы поняли, что я получил ответ непосредственно из руководства здесь и здесь , где вы должны были пойти первым.
Из комментариев обнаружено, что подстановочные символы LIKE (_
и %
) по умолчанию не выполняются по параметризованным запросам и поэтому могут вызвать неожиданные результаты.
Поэтому при использовании операторов «LIKE» используйте это «отрицательный lookahead» Regex для обеспечения того, чтобы эти символы были экранированы:
$param = preg_replace('/(?<!\\\)([%_])/g', '\\\$1',$param);
As альтернатива данному ответу выше, вы также можете использовать функцию MySQL CONCAT :
$stmt = $db->prepare("SELECT id,Username FROM users WHERE Username LIKE CONCAT('%',?,'%') ");
$stmt->bind_param("s", $param);
$stmt->execute();
Это означает, что вам не нужно редактировать значение $param
, но это делает для немного более длинных запросов.
?
i>). цитаты из-за того, что MySQL CONCATenate три строки.
– Martin
16 February 2017 в 10:52
CONCAT
в подготовленных операторах являются безопасными i> от инъекции, но вы должны быть осторожны при использовании предложения LIKE
в подготовленных операциях. Рассмотрим это: $stmt=$db->prepare("SELECT
customer` as suggestion
WHERE customername
LIKE CONCAT ('cust_',?, '%'); & Quot;); `, а затем $key='J%';
(или даже $key='';
), $stmt->bind_param('s', $key);
. Теперь $stmt->execute();
вернет ВСЕ записи i>. Таким образом, при работе с подготовленными утверждениями, имеющими предложение LIKE, вам все равно нужно обрабатывать _
и %
надлежащим образом. Даже если вы используете подготовленные инструкции, требуется ускорение, подобное $key='J\%';
.
– Jay Dadhania
13 July 2018 в 14:28