2011-04-27 69 views
16

Trong PHP với PDO, chúng tôi giới hạn những ký tự nào khi sử dụng. Tôi đã thử tìm kiếm tài liệu và trực tuyến nhưng không có kết quả.Các ký tự hợp lệ PDO cho trình giữ chỗ

Tôi đã tìm thấy một bài đăng trong đó người dùng đã sử dụng dấu gạch ngang trong tên đã phá vỡ truy vấn. Tôi đang viết một chức năng tự động tạo ra những cái tên này và vì dấu gạch nối không có nos, tôi đã tự hỏi nếu có một danh sách các lựa chọn thay thế.

<?php 
/* Execute a prepared statement by binding PHP variables */ 
$calories = 150; 
$colour = 'red'; 
$sth = $dbh->prepare('SELECT name, colour, calories 
    FROM fruit 
    WHERE calories < :calories AND colour = :colour'); 
$sth->bindParam(':calories', $calories, PDO::PARAM_INT); 
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12); 
$sth->execute(); 
?> 

Vì vậy, trong ví dụ này ký tự nào được phép trong chuỗi ': color'?

+0

Tôi không chắc chắn những giới hạn này là gì nhưng chữ cái và dấu gạch dưới chưa bao giờ thất bại :-) – prodigitalson

Trả lời

26

Cách dễ nhất để tìm hiểu, là chỉ cần kiểm tra mã nguồn:
https://github.com/php/php-src/blob/master/ext/pdo/pdo_sql_parser.re#L49:

BINDCHR  = [:][a-zA-Z0-9_]+; 

Bạn có thể sử dụng chữ + dấu gạch dưới.

+0

wow, tôi đã không nghĩ về điều đó! +1 – SeanDowney

+1

Chỉ cần nhìn vào nguồn tôi có thể thấy các lỗi trong đó ... biểu hiện bình luận của họ là sai. '--' phải được theo sau bởi khoảng trắng, không chỉ bất kỳ char không phải là dòng nào. – mpen

+2

Không thay đổi đối với [PHP 5.6] (http://lxr.php.net/xref/PHP_5_6/ext/pdo/pdo_sql_parser.re#49) nếu có ai quan tâm. – mpen

8

Nếu tôi đọc chính xác PDO SQL parser source code, các ký tự chữ và số cộng với dấu gạch dưới.

+0

ý tưởng rất sáng tạo! +1 – SeanDowney

+0

@totymedli: Đã cập nhật –

Các vấn đề liên quan