Consulta $wpdb update en plugin solo actualiza una columna
30 ene 2017, 16:25:21
Vistas: 19K
Votos: 0
Estoy realizando una actualización desde el administrador de WooCommerce, editando los detalles del pedido. Tengo dos problemas:
- Solo se actualiza la columna 'download-count'.
- No puedo capturar ningún error SQL.
Sin embargo, cuando uso la misma consulta en un archivo php independiente, funciona correctamente. ¿Qué está mal y cómo puedo obtener los errores SQL o al menos la consulta enviada?
$table = $wpdb->prefix . 'woocommerce_downloadable_product_permissions';
$expiry_date = date("Y-m-d", strtotime("+ 30 days"));
$expiry_time = $expiry_date . ' 00:00:10';
$wpdb->query("UPDATE `$table` SET
`downloads_remaining` = '1',
`access_expires` = '$expiry_time',
`download_count` = (`download_count` + 1)
WHERE `order_id` = '$post_id'");
Aquí está la "versión php independiente", que funciona:
$link = mysqli_connect($servername, $username, $password, $db);
$post_id = '219';
if (!$link) { exit; }
$expiry_date = date("Y-m-d", strtotime("+ 30 days"));
$expiry_time = $expiry_date . ' 00:00:00';
$table = 'hkmw_woocommerce_downloadable_product_permissions';
$query = "UPDATE `$table` SET
`downloads_remaining` = '1',
`access_expires` = '$expiry_time',
`download_count` = (`download_count` + 1)
WHERE `order_id` = '$post_id';";
if (!mysqli_query($link,$query)) {
printf("Errormessage: %s\n", mysqli_error($link));
}
mysqli_close($link);
Comentarios
Todas las respuestas a la pregunta
1
0
Tuve que usar dos consultas separadas. La sintaxis de $wpdb->update no puede manejar cálculos basados en el valor existente. Pero para los otros dos campos funciona. Así que quedó así:
$table = $wpdb->prefix . 'woocommerce_downloadable_product_permissions';
$expiry_date = date("Y-m-d", strtotime("+ 30 days")); // Fecha de expiración 30 días después
$expiry_time = $expiry_date . ' 00:00:00'; // Hora de expiración a media noche
$wpdb->query("UPDATE $table SET
download_count = (download_count + 1) // Incrementar el contador de descargas
WHERE order_id = '$post_id'");
$wpdb->update(
$table,
array(
'downloads_remaining' => '1', // Establecer descargas restantes a 1
'access_expires' => $expiry_time // Establecer fecha de expiración
),
array( 'order_id' => $post_id ), // Condición WHERE
array( '%s', '%s' ), // Formatos para los valores
array( '%d' ) // Formato para la condición
);

hal
35
21 feb 2017 14:42:57
Preguntas relacionadas