PHP, MySQL – можете ли вы различать строки, сопоставленные и затронутые строки?

Я пытаюсь написать PHP-MySQL процессор базы данных, который является несколько интеллектуальным. Когда этот процессор решает, что ему нужно сделать обновление, я хочу сообщить, был ли он действительно успешным или нет. Я думал, что могу использовать mysql_affected_rows

 // Example: // After running query "UPDATE mytable SET name='Test' WHERE ID=1" $result = mysql_affected_rows(); if ($result >= 1) { /* Success */ } 

Если, например, не было строки с ID = 1 , тогда $result бы равен 0 .

Тем не менее, оказывается, что mysql_affected_rows PHP – это фактические затронутые строки и может оставаться 0, если строка существует, но name уже было «Test». (Документы PHP даже говорят, что это так).

Если я запустил это в командной строке, я получаю следующую метаинформацию о запросе:

 Query OK, 0 rows affected (0.01 sec) Rows matched: 1 Changed: 0 Warnings: 0 

Есть ли способ для меня получить значение «Rows соответствует» в PHP вместо затронутых строк?

[ Изменить ]: Должен заметить, что я знаю, что могу запускать отдельный запрос, но я бы не хотел этого делать ради производительности.

Из документации MySQL для mysql_affected_rows :

Для операторов UPDATE, если вы указываете флаг CLIENT_FOUND_ROWS при подключении к mysqld, mysql_affected_rows () возвращает количество строк, сопоставляемых предложением WHERE. В противном случае поведение по умолчанию состоит в том, чтобы вернуть количество реально измененных строк.

С помощью mysqli вы можете указать CLIENT_FOUND_ROWS, используя mysqli :: real_connect .

 $db = mysqli_init(); $db->real_connect('host', 'username', 'password', 'dbname', '3306', null, MYSQLI_CLIENT_FOUND_ROWS); 

В PDO константа называется PDO :: MYSQL_ATTR_FOUND_ROWS

 $db = new PDO('mysql:dbname=mydatabase;host=myhost', 'username', 'password', array( PDO::MYSQL_ATTR_FOUND_ROWS => true )); 

Со старым и устаревшим расширением MySQL вы можете указать CLIENT_FOUND_ROWS, передавая значение 2 в качестве 5-го параметра для mysql_connect ( source ).

Вы также можете использовать функцию

 $variable = mysql_info(); 

Эта функция извлекает такую ​​строку:

Соответствие строк: 1 Изменено: 0 Предупреждения: 0

Вы можете работать со строковыми функциями в своей переменной, чтобы извлечь подстроку с количеством строк, которые соответствуют, и вы должны иметь это!