2011-02-16 63 views
17

Khi dữ liệu được trả về từ MySQL, nó sẽ tự động được trả về dưới dạng chuỗi, bất kể kiểu dữ liệu MySQL.Cách lấy số nguyên từ MySQL dưới dạng số nguyên trong PHP?

Có cách nào để yêu cầu MySQL/PHP duy trì các kiểu dữ liệu (ví dụ: int), vì vậy nếu bạn truy vấn một cột int, bạn nhận được một số nguyên trong PHP thay vì một chuỗi?

+2

Nó đáng chú ý là PHP không thể ho ld số nguyên lớn hơn 'PHP_INT_MAX' (2.147.483.647 trong máy tính của tôi). Điều đó có thể lưu trữ một cách an toàn một INT đã ký nhưng không phải là một INT không dấu hoặc bất cứ điều gì lớn hơn. –

Trả lời

15

Bạn có thể làm Type casting để chuyển đổi loại dữ liệu trả về bằng cách sử dụng PHP.

Bạn có thể xem int, intval để chuyển đổi thành số nguyên. Bạn cũng có thể sử dụng settype:

settype($foo, "array"); 
settype($foo, "bool"); 
settype($foo, "boolean"); 
settype($foo, "float"); 
settype($foo, "int"); 
settype($foo, "integer"); 
settype($foo, "null"); 
settype($foo, "object"); 
settype($foo, "string"); 

Một cách khác sẽ là:

$foo = (array)$foo; 
$foo = (b)$foo;  // from PHP 5.2.1 
$foo = (binary)$foo; // from PHP 5.2.1 
$foo = (bool)$foo; 
$foo = (boolean)$foo; 
$foo = (double)$foo; 
$foo = (float)$foo; 
$foo = (int)$foo; 
$foo = (integer)$foo; 
$foo = (object)$foo; 
$foo = (real)$foo; 
$foo = (string)$foo; 
+1

+1 Điều đó khá nhiều bao gồm các tùy chọn truyền kiểu. :-) –

+0

Nếu số nguyên của bạn lớn hơn 'PHP_INT_MAX', nó sẽ bị giới hạn. Ví dụ, không có cách nào để có được đầy đủ các 'unsigned bigint' của MySQL cho PHP ngay cả khi bạn đang chạy một PHP 64-bit. – Pacerier

1

Như PHP không phải là một ngôn ngữ mạnh mẽ gõ, điều này là hơi vô nghĩa, nhưng bạn có thể tất nhiên chỉ đơn giản là đúc lĩnh vực này trong câu hỏi cho một int qua settype, v.v. trước khi sử dụng.

Không phân biệt, không có cách nào (mà tôi biết) để duy trì thông tin "loại" này tự động.

+1

Trong nhiệm vụ tìm kiếm ý nghĩa, tôi đang cố gắng tưởng tượng có thể đạt được hiệu suất hoạt động thông qua việc soạn thảo. Tôi sẽ nghĩ rằng có giá trị số như int hoặc float sẽ sử dụng ít bộ nhớ hơn, mặt khác, quá trình tự in chính tả sẽ tiêu tốn tài nguyên và cũng làm bloat mã php một chút. Vì vậy, typecasting thủ công có vẻ như bề ngoài microoptimizing với tôi, trong khi có kết quả trả về MySQL trong loại chính xác sẽ có vẻ hợp lý, nếu có thể. – Schmoove

0

Thư viện mặc định của PHP cho MySQL không có bất kỳ tùy chọn nào thuộc loại này. Sử dụng loại đúc như (int) hoặc intval, (float) v.v.

0

trong php, bạn có thể sử dụng ([type]) để chắc chắn $ something là số nguyên, giúp sql này nếu bạn khow.

ví dụ:

(int) $something; 
2

Bạn có thể sử dụng loại đúc một khi bạn đã kéo dữ liệu từ cơ sở dữ liệu MySQL của bạn

$row['field'] = (int)$row['field']; 
8

Trong MySQLi sử dụng bind_result: nó đặt đúng loại và xử lý NULL.

+0

PDO cũng có khả năng này. – awm

0

Tôi không biết bạn đã đặt câu hỏi nào trong bối cảnh nào. Bởi vì kiểu dữ liệu của một biến php phụ thuộc vào kiểu dữ liệu mà một cột trong bảng của bạn có. Nếu cột có kiểu dữ liệu "int" trong mysql, bạn nhận được một số nguyên trong php (không phải là một chuỗi).

Nhưng dù sao, bạn có thể sử dụng hàm is_numeric(), is_int() hoặc gettype() php để biết kiểu dữ liệu của giá trị trả về từ Mysql. Vấn đề với is_numeric() là nó trả về true ngay cả khi biến chứa chuỗi số, ví dụ: "2". Nhưng gettype() sẽ trả về "chuỗi" và is_int() sẽ luôn trả về false trong ví dụ được đề cập tức là "2".

Một khi bạn biết kiểu dữ liệu của một giá trị trả về bạn có thể ràng buộc các biến php để duy trì loại theo loại đúc như thế này:

// Suppose this is the returned value from mysql and 
// you do not know its data type. 
$foo = "2"; 

if (gettype($foo) == "string"){ 
    $foo = (string) $foo; 
} 

Bạn có thể thực hiện một số kiểm tra cho những gì kiểu dữ liệu biến đã và sau đó đúc nó cho phù hợp.

Tôi hy vọng câu trả lời này sẽ hữu ích. Chúc may mắn!:)

0

Nếu bạn muốn nhận được các giá trị ordening theo Giá, bạn có thể thay đổi Type dữ liệu để float từ cột (ví dụ: giá)

EX:

TABLE eletronics

price  id 
---------------- 
55.90  1 
40.33  2 
10.60  3 
1596.90  4 
56.90  5 

PHP:

$sql = $pdo->query("SELECT * FROM eletronics ORDER BY price DESC"); 

// dẫn

1596.90  4 
56.90  5 
55.90  1 
40.33  2 
10.60  3 

// Trình tự đang được mỗi giá // OBS: Bạn có thể thay đổi các dấu chấm với "" sử dụng str_replace() // kết quả: 1596,90 - 56,90 - 55,90 - 40,33 - 10,60, vv

3

Nếu bạn đang chạy Ubuntu:

sudo apt-get remove php5-mysql 
sudo apt-get install php5-mysqlnd 
sudo service apache2 restart 
Các vấn đề liên quan