2013-11-02 3 views
0

Я пытаюсь запустить счет на моей БД, и это работает правильно, за исключением случаев, когда одно из имен пользователей содержит апостроф.Mysqli COUNT с переменной, которая содержит апостроф

Я использую подготовленные операторы, поэтому я предполагаю, что его сбежали правильно?

Может кто-нибудь сказать мне, что не так?

$var1 = $_SESSION['SESS_STAFF_NAME']; 
$qry = "SELECT COUNT(*) FROM tbl WHERE staff = ?" ; 
$stmt = $mysqli->prepare($qry); 
$stmt->bind_param('s', $var1);       
$stmt->execute(); 
$result = $stmt->get_result(); 
$total_items = $result->fetch_row(); 
$rows = $total_items[0]; 
echo $rows; 

я получаю только вопрос об ошибке, когда переменная персонал содержит ', например, «О'Коннор»; он, кажется, возвращает общее количество всех записей.

+0

Общее количество записей? Итак, «кажется», или вы уверены в этом? –

+0

Это было правильно, мне нужно было добавить еще одну переменную, чтобы показывать только активные поля (одна из моих строк таблицы). Спасибо – Darkside

ответ

-1

Обычно это то же самое, что и подготовленный оператор PDO: запросы предварительно скомпилированы, что гарантирует защиту от SQL-инъекции. Неважно, чтобы избежать привязки параметров.

Тест:

ThinkPad-T420 ~ $ cat test.php 
#!/usr/bin/php 
<?php 
    $var = "String' thing"; // It's working too with $var = 'String\' thing' 
    $dbh = new mysqli("localhost", "root", "sitri", "test"); 
    $sql = "SELECT COUNT(*) AS nb FROM t WHERE field = ?"; 
    $stmt = $dbh->prepare($sql); 
    $stmt->bind_param('s', $var); 
    $stmt->execute(); 
    $result = $stmt->get_result(); 
    $total_items = $result->fetch_assoc(); 
    echo "total=" . $total_items['nb'] . "\n"; 
?> 
ThinkPad-T420 ~ $ echo "DESC t"|mysql -uroot -p"${passwd}" test 
Field Type Null Key Default Extra 
field varchar(254) YES  NULL  
ThinkPad-T420 ~ $ echo "SELECT * FROM t;"|mysql -uroot -p"${passwd}" test 
field 
String' thing 
ThinkPad-T420 ~ $ ./test.php 
total=1 
+0

'mysql' также имеет параметр' -e' для выполнения прямого оператора. – Gumbo

+0

Да, спасибо. Я подозревал существование такого варианта, но это было просто для примера. Этот вопрос далеко не посвящен тому, как запускать запрос из командной строки. Также я не понимаю этого downvote, но, в любом случае, это не имеет значения ... –

Смежные вопросы