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.

Однако оказывается что PHP's mysql_affected_rows фактические затронутые строки и могут быть все еще быть 0, если строка существует, но name уже был "Тест". (В документах PHP даже говорится дело обстоит так).

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

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

Есть ли какой-либо способ для меня получить это, "Строки соответствовали" значению в PHP вместо затронутых строк?

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

11
задан Nicole 27 May 2010 в 23:58
поделиться

1 ответ

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

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

В 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 ( источник ).

14
ответ дан 3 December 2019 в 05:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: