01/10/2018, 00:43

Tại sao cách làm tương tự nhau lại cho ra kết quả khác nhau?

/*Cách 1*/
$db= new PDO("mysql:host=localhost;dbname=name", 'root', ');
//$db->query('set names "utf8"');	
$var1 = 1;
$var2 = 2;
$sql = "SELECT * FROM theloai LIMIT ?,?";
$cursor = $db->prepare($sql);

$cursor->bindParam(1,$var1);
$cursor->bindParam(2,$var2);
$cursor->execute();


echo "<br>";
print_r($cursor->fetchAll());
echo "<br>";
/* Cách 2*/
$db= new PDO("mysql:host=localhost;dbname=name", 'root', ');
//$db->query('set names "utf8"');	
$var1 = 1;
$var2 = 2;
$sql = "SELECT * FROM theloai LIMIT $var1,$var2";
$cursor = $db->prepare($sql);
$cursor->execute();


echo "<br>";
print_r($cursor->fetchAll());
echo "<br>";

Mọi người giúp mình giải quyết vấn đề này với. Hai cách mình làm tương tự nhau mà mình không hiểu tại sao lại cho ra 2 kết quả khác nhau. Cách 1 là chạy ra kết quả không mong muốn. Cách 2 thì chạy đúng.
Bảng theloai của mình:

CREATE TABLE theloai (
id int(11) NOT NULL,
tentheloai varchar(100) NOT NULL,
theloai_id int(11) NOT NULL,
created_at date NOT NULL,
updated_at date NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Phan Hoàng viết 02:54 ngày 01/10/2018

Nếu mình nhớ không nhầm thì bindParam sẽ mặc định là PDO::PARAM_STR nên câu lệnh ở 1 sẽ là

SELECT * FROM theloai LIMIT '1','2'

Bạn thử var_dump cái $cursor ra xem thế nào? (mình không có máy test)

Quân viết 02:55 ngày 01/10/2018

chính xác là thế rồi

Đinh Công Mạnh viết 02:49 ngày 01/10/2018

Đúng rồi á bạn. Mình có test lại và tìm ra vấn đề rồi. Mình cảm ơn nha.

Bài liên quan
0