PDO были затронуты строк во время выполнения оператора

Я нашел много способов использовать инструкцию exec для PDO, но я не уверен, что это помогает мне. Я понимаю, что я должен использовать функцию execute () для подготовленных операторов. Я обновляю строку с данными из пользовательского ввода, поэтому я бы хотел использовать подготовленный оператор вместо вызова query ().

Мой код выглядит следующим образом:

$dbh = buildDBConnector(); $sql = "UPDATE tb_users SET authState=1 WHERE id = ? AND authPass = ?"; $q = $dbh->prepare($sql); $f = $q->execute(array($id,$authPass)); if($f){ echo '<br />Success<br />'; }else{ echo '<br />Failure<br />'; } 

Проблема заключается в том, что сам запрос является безошибочным и выполняется отлично, поэтому нет возможности хранить в $ f. Тем не менее, мне нужно знать, действительно ли он нашел строку для обновления, а затем успешно ее обновил. Другими словами, мне нужны затронутые строки. Когда он отправляется в Google, он продолжает приходить к команде exec, но, по моему мнению, exec не для подготовленных операторов? Какие-либо предложения?

Solutions Collecting From Web of "PDO были затронуты строк во время выполнения оператора"

Попробуйте $q->rowCount() . Подготовленные операторы возвращают количество затронутых строк с помощью этого метода.

$q->rowCount() возвращает количество строк, на которые влияет последний (исполняемый) SQL-оператор, где $q – это подготовленный оператор, который часто называют $stmt .

Поэтому большинство пользователей, которые читают это, могут хотеть что-то вроде:

 $pdo = new PDO($dsn, $username, $password); $sql = "UPDATE tb_users SET authState=1 WHERE id = ? AND authPass = ?"; $stmt = $dbh->prepare($sql); $stmt->execute(array($id, $authPass)); if ($stmt->rowCount()){ echo 'Success: At least 1 row was affected.'; } else{ echo 'Failure: 0 rows were affected.'; } 

Замечание: при обновлении таблицы с одинаковыми значениями rowCount() всегда будет возвращать 0 . Это нормальное поведение. Вы можете изменить его самостоятельно, начиная с PHP 5.3, создав объект PDO со следующим атрибутом:

 <? php $p = new PDO($dsn, $user, $pass, array(PDO::MYSQL_ATTR_FOUND_ROWS => true)); ?> 

Затем rowCount() вернет количество строк, которые ваш запрос-обновление действительно нашел / сопоставил.

rowCount() из подготовленных операторов возвращает затронутые строки, если это UPDATE , DELETE или INSERT . В противном случае он возвращает количество строк, возвращаемых из SELECT .

Я думаю, что PDO rowCount () бесполезен в MySQL с одним запросом UPDATE. потому что он всегда возвращает 0;

 ex: TABLE{id=1, col1="A"} UPDATE TABLE SET col1="AA" WHERE id=1; rowCount will return 0; also UPDATE TABLE SET col1="AA" WHERE id=999; rowCount will return 0; so rowCount() is useless in this case. 

я еще не тестировал этот запрос. UPDATE TABLE SET col1 = "AA"