Insertar comentarios a través de un procedimiento

He estado jugando con los procedimientos e intenté poner el inserto de comentarios en un procedimiento. Tengo algunos problemas y me preguntaba si podrían echar un vistazo.

function wp_insert_comment($commentdata) { $comment_ID = comment_ID; $comment_post_ID = comment_post_ID; $comment_author = comment_author; $comment_author_email = comment_author_email; $comment_author_url = comment_author_url; $comment_author_IP = comment_author_IP; $comment_date = comment_date; $comment_date_gmt = comment_date_gmt; $comment_content = comment_content; $comment_karma = comment_karma; $comment_approved = comment_approved; $comment_agent = comment_agent; $comment_type = comment_type; $comment_parent = comment_parent; $user_id = user_id; global $wpdb; extract(wp_unslash($commentdata), EXTR_SKIP); if ( ! isset($comment_author_IP) ) $comment_author_IP = ''; if ( ! isset($comment_date) ) $comment_date = current_time('mysql'); if ( ! isset($comment_date_gmt) ) $comment_date_gmt = get_gmt_from_date($comment_date); if ( ! isset($comment_parent) ) $comment_parent = 0; if ( ! isset($comment_approved) ) $comment_approved = 1; if ( ! isset($comment_karma) ) $comment_karma = 0; if ( ! isset($user_id) ) $user_id = 0; if ( ! isset($comment_type) ) $comment_type = ''; $wpdb->insert($wpdb->comments, '$comment_ID','$comment_post_ID', '$comment_author', '$comment_author_email', '$comment_author_url', '$comment_author_IP', '$comment_date', '$comment_date_gmt', '$comment_content', '$comment_karma', '$comment_approved', '$comment_agent', '$comment_type', '$comment_parent', '$user_id'); $id = (int) $wpdb->insert_id; if ( $comment_approved == 1 ) wp_update_comment_count($comment_post_ID); $comment = get_comment($id); do_action( 'wp_insert_comment', $id, $commen ); wp_cache_set( 'last_changed', microtime(), 'comment' ); return $id; 

}

Así que aquí solo cambié las variables en la parte superior porque no funcionó para mí con la matriz que se utilizó anteriormente. Envío estas variables a:

 function _insert_replace_helper( $table, $comment_ID, $comment_post_ID, $comment_author, $comment_author_email, $comment_author_url, $comment_author_IP, $comment_date, $comment_date_gmt, $comment_content, $comment_karma, $comment_approved, $comment_agent, $comment_type, $comment_parent, $user_id, $format = null, $type = 'INSERT' ) { $sql = "CALL CommentsProcedure('$comment_ID', '$comment_post_ID', '$comment_author', '$comment_author_email', '$comment_author_url', '$comment_author_IP', '$comment_date', '$comment_date_gmt', '$comment_content', '$comment_karma', '$comment_approved', '$comment_agent', '$comment_type', '$comment_parent', '$user_id')"; return $this->query( $this->prepare( $sql, $comment_ID, $comment_post_ID, $comment_author, $comment_author_email, $comment_author_url, $comment_author_IP, $comment_date, $comment_date_gmt, $comment_content, $comment_karma, $comment_approved, $comment_agent, $comment_type, $comment_parent, $user_id ) ); } 

Y este es mi Storedprocedure

  DELIMITER $$ CREATE PROCEDURE `CommentsProcedure`(IN comment_ID bigint(20), IN comment_post_ID bigint(20), IN comment_author tinytext, IN comment_author_email VARCHAR(100), IN comment_author_url VARCHAR(200), IN comment_author_IP VARCHAR(100), IN comment_date datetime, IN comment_date_gmt datetime, IN comment_content text, IN comment_karma int(11), IN comment_approved VARCHAR(20), IN comment_agent VARCHAR(255), IN comment_type VARCHAR(20), IN comment_parent bigint(20), IN user_ID bigint(20)) BEGIN INSERT INTO wp_comments(comment_ID, comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_date_gmt, comment_content, comment_karma, comment_approved, comment_agent, comment_type, comment_parent, user_id) VALUES(comment_ID, comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_date_gmt, comment_content, comment_karma, comment_approved, comment_agent, comment_type, comment_parent, user_id); END $$ DELIMITER ; 

No tengo ni idea de lo que estoy haciendo mal, sería útil si alguien pudiera darme una guía, he estado estancado por tanto tiempo y estoy tirando de mi cabello! (Lo siento por el inglés malo, no hablante nativo, no dude en pregunte si algo no está claro. Gracias de antemano

Solutions Collecting From Web of "Insertar comentarios a través de un procedimiento"

Pocas notas aquí. 1, ¿por qué estás volviendo a declarar las variables?

Por ejemplo:

 $comment_ID = comment_ID; $comment_post_ID = comment_post_ID; $comment_author = comment_author; $comment_author_email = comment_author_email; 

No tiene sentido, si una variable ya está configurada, no hay razón para configurarla por segunda vez. En segundo lugar, a menos que pase variables a la función a través de argumentos como ese:

 Function wp_insert_comment($some_var, $some_other var) { } wp_insert_comment($some_var, $some_other_var); 

luego, una vez que se ejecuta la función, esas variables al principio serán = nada, ya que no están establecidas.

En tercer lugar, parece que te estás perdiendo $ en el segundo set. Si trabajas dentro de una clase (OOP), técnicamente puedes salirte con la tuya ya que Php asumirá que son constantes. Sin embargo, dado su código, sugeriría que el problema aquí es que esas variables no se transfieren a la función de antemano.

Intente agregar echo $ comment_ID, o cualquiera de las otras variables, y vea si aparece algo. Si no, ese es tu problema. Supongo que otro método, si realmente no quieres pasar argumentos a la función es usar globales, sin embargo, eso es una mala práctica y puede llevar a grandes pesadillas a la hora de depurar.

Personalmente, me gusta pasar argumentos como matrices, de esa manera se pueden cambiar o agregar nuevas variables, sin tener que cambiar cada instancia de la llamada a la función. Por ejemplo, haría algo como esto:

 function some_function ($array=array()) { // do some stuff } some_function (array('variable_1'=>$variable, 'variable_2'=>$variable_2)); 

puede ser un poco más de tipeo, pero vale la pena ya que hace que sus funciones sean mucho más flexibles.

Para responder a su pregunta, la razón por la que sus variables parecen vacías es porque está abordando la matriz de forma incorrecta. Suponiendo que $ commentdata es el conjunto pasado, se abordarían las variables de esta manera:

 $comment_ID = $commentdata['comment_ID']; $comment_post_ID = $commentdata['comment_post_ID']; 

etc. Esto se debe a que una matriz almacena datos en algo llamado par clave => valor. Trata de hacerlo:

 var_dump($commentdata); 

justo al comienzo de su llamada de función, para obtener una mejor comprensión de lo que quiero decir.

Como parece que eres relativamente nuevo en php, te sugiero que utilices los siguientes recursos para facilitar el aprendizaje:

http://www.php.net/ o http://www.w3schools.com/PHP/

o eche un vistazo a algunas de las preguntas y respuestas en la sección php de SO.