penis_19_cm ([info]penis_19_cm) wrote,
@ 2007-08-25 23:33:00
Previous Entry  Add to memories!  Tell a Friend  Next Entry
Сказка про php
В тридевятом домене, на тридесятом mysql-сервере жила-была вот такая таблица:
CREATE TABLE test (
      i int not null,
      j int not null
);

В один прекрасный день злая волшебница вставила в неё одну единственную строку:
INSERT INTO test (i, j) VALUES (1, 10);

Прекрасный принц решил посмотреть, что получится, если выполнить следующий код:
<?
$r = mysql_query("SELECT * FROM test");
$res = mysql_fetch_assoc($r);

$mask = $res['i'] | $res['j'];

printf("\$mask = %04b", $mask);
?>


Думаете, он получил 0b0001 | 0b0101 = 0b0111? А вот хуй вам в сраку, мои маленькие слушатели, прекрасный принц увидел на выходе "0101", чему, впрочем, и сам был зело удивлён. А всё оттого, что gettype($res['i']) == "string".

Мораль этой сказки проста: явно приводите данные, полученные из БД к целочисленному типу, если собираетесь проводить над ними побитовые операции.



(Read 1 comment) - (Post a new comment)


[info]k001
2008-01-24 08:23 pm UTC (link)
Вообще-то 10 — это 0b1010, а не 0b0101.
В остальном сказка понравилась.

(Reply to this)


(Read 1 comment) - (Post a new comment)

Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…