2012-12-18 55 views
8

Tôi đang viết một plugin cho Wordpress, mà nên kiểm tra nếu một mục mysql đã tồn tại.
Nếu không tồn tại, Wordpress sẽ chèn mục nhập vào bảng. Phần này hoạt động như tôi mong đợi.
Tuy nhiên, nếu đã có một mục nhập trong bảng mysql, Wordpress nên cập nhật bảng, nhưng điều này không hoạt động.Wordpress cập nhật bảng mysql

Mã Tôi đang sử dụng cho điều này là đoạn mã sau:

$wpdb->query($wpdb->prepare("UPDATE $table_name SET time=$current_timestamp WHERE userid=$userid")); 

Các biến tôi sử dụng trong truy vấn này là chính xác, bởi vì chúng được sử dụng thành công để chèn vào bảng, nhưng ở đâu đó trên đường đi một cái gì đó đi sai với chức năng cập nhật.

Ai đó có thể cho tôi biết tôi đang làm gì sai ở đây không?
Cách thích hợp để thực hiện việc này là gì?

Trả lời

11

giá trị của cột time phải được kèm theo single quote

$wpdb->query($wpdb->prepare("UPDATE $table_name SET time='$current_timestamp' WHERE userid=$userid")); 
+0

Cảm ơn bạn rất nhiều! Tôi đã nhìn chằm chằm bản thân mình mù vào một cái gì đó tôi dự kiến ​​sẽ phức tạp hơn nhiều. Nó hoạt động hoàn hảo ngay bây giờ. –

+3

nhưng truy vấn là dễ bị tấn công với 'SQL Injection', hãy dành thời gian để đọc bài viết để ngăn chặn nó. [** Làm thế nào để ngăn chặn SQL injection trong PHP **] (http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection) –

+0

Cảm ơn bạn đã đưa ra cách dễ nhất để thực thi truy vấn cập nhật –

2
$result = $wpdb->update('westend_areaofficers', array('officerOrder' => $memberOrder, 
'officerTitle' => $memberTitle, 'officerName' => $memberName, 'officerPhone' => 
$memberPhone), array('officerId' => $memberId), array('%d','%s', '%s', '%s'), 
array('%d')); 

if($result > 0){ 
echo "Successfully Updated"; 
} 
else{ 
    exit(var_dump($wpdb->last_query)); 
} 
$wpdb->flush(); 

Các giải pháp trên là những gì làm việc cho tôi vì sử dụng $ wpbd-> query ($ wpbd-> chuẩn bị()) tuyên bố đã không hoạt động ngay cả khi truyền theo đúng số và định dạng chuỗi.
Mục đích của hàm var_dump() là để xem nơi thực thi truy vấn sai. Nó in ra các truy vấn và các giá trị được thông qua. Tất nhiên, sử dụng hàm hàm $ wpdb-> flush() xóa bộ nhớ cache cho truy vấn tiếp theo để thực hiện.

1

Ví dụ:

sự thay đổi của người dùng (có ID là 546) nicename để Harde_Bande

$execut= $wpdb->query($wpdb->prepare("UPDATE $wpdb->users SET user_nicename = %d WHERE ID = %s", "Harde_Bande", 546)); 
var_dump($execut); 

Tìm hiểu thêm tại: http://codex.wordpress.org/Class_Reference/wpdb#Examples

0
UPDATE wp_options SET option_value = replace(option_value, 'http://www.example.com', 'http://localhost/test-site') WHERE option_name = 'home' OR option_name = 'siteurl'; 
UPDATE wp_posts SET post_content = replace(post_content, 'http://www.example.com', 'http://localhost/test-site'); 
UPDATE wp_postmeta SET meta_value = replace(meta_value,'http://www.example.com','http://localhost/test-site'); 
Các vấn đề liên quan