2010-06-09 45 views
10

Tôi đang sử dụng một yêu cầu AJAX jQuery đến một trang có tên là like.php kết nối với cơ sở dữ liệu của tôi và chèn một hàng. Đây là mã số like.php:mysql_real_escape_string() chỉ tạo một chuỗi rỗng?

<?php 

// Some config stuff 
define(DB_HOST, 'localhost'); 
define(DB_USER, 'root'); 
define(DB_PASS, ''); 
define(DB_NAME, 'quicklike'); 

$link = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die('ERROR: ' . mysql_error()); 
$sel = mysql_select_db(DB_NAME, $link) or die('ERROR: ' . mysql_error()); 

$likeMsg = mysql_real_escape_string(trim($_POST['likeMsg'])); 
$timeStamp = time(); 

if(empty($likeMsg)) 
    die('ERROR: Message is empty'); 

$sql = "INSERT INTO `likes` (like_message, timestamp) 
     VALUES ('$likeMsg', $timeStamp)"; 

$result = mysql_query($sql, $link) or die('ERROR: ' . mysql_error()); 

echo mysql_insert_id(); 

mysql_close($link); 

?> 

Dòng có vấn đề là $likeMsg = mysql_real_escape_string(trim($_POST['likeMsg']));. Có vẻ như chỉ trả lại một chuỗi rỗng và trong cơ sở dữ liệu của tôi dưới cột like_message, tất cả những gì tôi thấy là các mục nhập trống. Nếu tôi loại bỏ mysql_real_escape_string() mặc dù, nó hoạt động tốt.

Đây là mã jQuery của tôi nếu nó trợ giúp.

$('#like').bind('keydown', function(e) { 
    if(e.keyCode == 13) { 
     var likeMessage = $('#changer p').html(); 

     if(likeMessage) { 
      $.ajax({ 
       cache: false, 
       url: 'like.php', 
       type: 'POST', 
       data: { likeMsg: likeMessage }, 
       success: function(data) { 
        $('#like').unbind(); 
        writeLikeButton(data); 
       } 
      }); 
     } else { 
      $('#button_container').html(''); 
     } 
    } 
}); 

Tất cả mã jQuery này hoạt động tốt, tôi đã thử nghiệm bản thân một cách độc lập.

Bất kỳ trợ giúp nào được đánh giá cao, cảm ơn.

+0

Trước khi thực thi SQL, 'var_dump ($ likeMsg); echo $ sql; chết; 'và xem những biến đó chứa gì. Sau đó nếu nó là ok, dán đầu ra SQL vào phpMyAdmin và kiểm tra kết quả. – hsz

Trả lời

22

Bạn có chắc chắn 1000% rằng $_POST["likeMsg"] thực sự chứa nội dung nào đó không?

Đối với mysql_real_escape_string() trả lại một giá trị rỗng, các manual nói chỉ có một tình huống mà có thể xảy ra:

Lưu ý: Một kết nối MySQL là cần thiết trước khi sử dụng mysql_real_escape_string() nếu không một lỗi cấp E_WARNING là được tạo và FALSE được trả lại. Nếu link_identifier không được định nghĩa, kết nối MySQL cuối cùng được sử dụng.

điều này dường như không phải là trường hợp ở đây, vì bạn có kết nối mở. Lạ thật.

+0

Tôi đọc rằng khi tôi google'd vấn đề. Tôi đã khởi tạo một kết nối cơ sở dữ liệu trước khi sử dụng 'mysql_real_escape_string()'. –

+0

@James sau đó nó phải là dữ liệu đó. Bạn có thể hiển thị một bãi chứa '$ _POST' không? –

+0

@James cách khác, bạn có thể thử chỉ định rõ ràng kết nối làm tham số không? –

1

Thực hiện var_dump $ _POST ['likeMsg'] và var_dump of $ likeMsg. Điều đó cung cấp cho bạn thông tin về những gì xảy ra sai.

13

Như câu trả lời khác không làm rõ chính xác những gì để làm, đây là của tôi:

Khi bạn làm

$db_connection = new mysqli($SERVER, $USERNAME, $PASSWORD, $DATABASE); 

bạn cần phải thoát khỏi như thế này:

$newEscapedString = $db_connection->real_escape_string($unescapedString); 

LƯU Ý : Bởi vì mọi người đang downvoting này (WTF !?), đây là trang chính thức của hướng dẫn php chính thức nói chính xác những gì tôi đã đăng: real_escape_string @ PHP Manual.

+2

+1 Tôi đã xem tài liệu. Có thể mọi người sử dụng nhiều hơn để xem biểu mẫu thủ tục thay vì biểu mẫu hướng đối tượng. – Ryan

+0

điều này làm việc cho tôi, được thăng hạng: D –

+0

Thats một bài đăng thực sự hữu ích nhờ người đàn ông – PhpDude

1

Đối với những người có thể tìm thấy điều này một lần nữa, tôi chỉ gặp phải vấn đề này khi tôi đang di chuyển từ PHP5 sang PHP7. Tôi đang thay đổi từ

string mysql_real_escape_string(string $unescaped, [resource $link = NULL])

tới:

string mysqli_real_escape_string(mysqli $link, string $escapestr)

Vì vậy, nói cách khác, cơ sở dữ liệu $ link không còn tùy chọn và di chuyển đến vị trí số đầu tiên. Nếu bỏ qua, nó trả về một chuỗi rỗng, không có lỗi.

0

mysql_real_escape_string() sẽ trả về phản hồi trống nếu bạn chưa thực hiện kết nối với cơ sở dữ liệu ...

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