Так как это 2015, и устарела функциональность mysql_*
, это только PDO
визуализация.
';
try {
$theCategory="fruit"; // value from user, hard-coded here to get one in
$dbh = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// prepared statement with named placeholders
$stmt = $dbh->prepare("select id,foodName from foods where category=:theCat and perishable=1");
$stmt->bindParam(':theCat', $theCategory, PDO::PARAM_STR,20);
$stmt->execute();
echo "rowCount() returns: ".$stmt->rowCount().$b; // See comments below from the Manual, varies from driver to driver
$stmt = $dbh->prepare("select count(*) as theCount from foods where category=:theCat and perishable=1");
$stmt->bindParam(':theCat', $theCategory, PDO::PARAM_STR,20);
$stmt->execute();
$row=$stmt->fetch(); // fetches just one row, which is all we expect
echo "count(*) returns: ".$row['theCount'].$b;
$stmt = null;
// PDO closes connection at end of script
} catch (PDOException $e) {
echo 'PDO Exception: ' . $e->getMessage();
exit();
}
?>
create table foods
( id int auto_increment primary key,
foodName varchar(100) not null,
category varchar(20) not null,
perishable int not null
);
insert foods (foodName,category,perishable) values
('kiwi','fruit',1),('ground hamburger','meat',1),
('canned pears','fruit',0),('concord grapes','fruit',1);
Для моей реализации я получаю вывод 2
для обоих echos
выше. Цель вышеупомянутых 2 стратегий состоит в том, чтобы определить, использует ли реализация вашего драйвера rowCount, и если нет, искать запасную стратегию.
Из руководства по PDOStatement :: rowCount :
PDOStatement :: rowCount () возвращает количество строк, затронутых оператором DELETE, INSERT или UPDATE.
For most databases
, PDOStatement :: rowCount () не возвращает количество строк, затронутых оператором SELECT. Вместо этого используйте PDO :: query (), чтобы выдать инструкцию SELECT COUNT (*) с теми же предикатами, что и предполагаемый оператор SELECT, а затем используйте PDOStatement :: fetchColumn (), чтобы получить количество строк, которые будут возвращены. Ваше приложение может затем выполнить правильное действие.
Начало каждого элемента выровнено с адресом самого объединения.
поэтому отдельные сравнения в выражении, о котором вы спрашиваете, верны, но выражение в целом ложно, если только объединение расположено по адресу 0x0001.
Удаленный текст применяется к следующим сравнениям :
&u.l == &u.i == &u.s == &u.c[0]
В исправленной версии сравниваются различные типы указателей - указатели должны быть преобразованы в недействительные указатели.
Меня попросили процитируйте стандарт - или укажите раздел стандарта.
C99 - раздел 6.7.2.1 Спецификаторы структуры и объединения (параграф 14):
Указатель на объект объединения, преобразованный соответствующим образом, указывает на каждый из его членов ( или, если член является битовым полем, то в единицу, в которой он находится), и наоборот.