Log in

View Full Version : MySQL to WordPress WPDB conversion?



wyclef
07-24-2018, 04:33 AM
Hello,

I'm trying to convert some old MySQL to work with WordPress WPDB (https://developer.wordpress.org/reference/classes/wpdb/prepare/). I have taken a stab at it but wanted another eye here as it seems I might not be doing this correct.

SQL:

<?
$sql = "SELECT wp_acf_values.value FROM wp_acf_values, wp_acf_fields WHERE wp_acf_fields.post_id = '620' AND wp_acf_fields.id = wp_acf_values.field_id ORDER BY wp_acf_fields.order_no";
$result = mysql_query($sql) or die('Content was not loaded.');
$counter = 0;
while($post = mysql_fetch_array($result)) {

$sqlSecond = "SELECT meta_value FROM wp_postmeta WHERE meta_id = '".$post['value']."'";
$result1 = mysql_query($sqlSecond) or die('Content was not loaded.');
while($post1 = mysql_fetch_array($result1)) {
$data[$counter] = $post1['meta_value'];
$counter++;
}
}

// get image
$sql = "SELECT meta_value FROM wp_postmeta WHERE post_id = '".$data['1']."' AND meta_key = '_wp_attached_file'";
$result = mysql_query($sql) or die('Content was not loaded.');
$counter = 0;
while($post = mysql_fetch_array($result)) {
$imgURL = $post['meta_value'];
}
?>

WPDB:

<?
$sql = $wpdb->prepare( "SELECT wp_acf_values.value FROM wp_acf_values, wp_acf_fields WHERE wp_acf_fields.post_id = '620' AND wp_acf_fields.id = wp_acf_values.field_id ORDER BY wp_acf_fields.order_no" );
$result = $wpdb->query ( $sql ) or die('Content was not loaded.');
$counter = 0;
while($post = mysql_fetch_array($result)) {

$sqlSecond = $wpdb->prepare( "SELECT meta_value FROM wp_postmeta WHERE meta_id = %s", $post['value'] );
$result1 = $wpdb->query ( $sqlSecond ) or die('Content was not loaded.');
while($post1 = mysql_fetch_array($result1)) {
$data[$counter] = $post1['meta_value'];
$counter++;
}
}

// get image
$sql = $wpdb->prepare( "SELECT meta_value FROM wp_postmeta WHERE post_id = %s AND meta_key = '_wp_attached_file'", $data['1'] );
$result = $wpdb->query ( $sql ) or die('Content was not loaded.');
$counter = 0;
while($post = mysql_fetch_array($result)) {
$imgURL = $post['meta_value'];
}
?>

Thanks

wyclef
07-27-2018, 12:24 AM
Seems like mysql_fetch_array won't work. Anyone know how to port that over for WPDB?

wyclef
07-31-2018, 03:17 AM
Latest effort. Anyone familiar with WPDB?


<?

global $wpdb;

$sql = $wpdb->prepare( "SELECT wp_acf_values.value FROM wp_acf_values, wp_acf_fields WHERE wp_acf_fields.post_id = '620' AND wp_acf_fields.id = wp_acf_values.field_id ORDER BY wp_acf_fields.order_no" );
$result = $wpdb->get_results ( $sql ) or die('Content was not loaded.');
$counter = 0;

foreach ($result as $post ) {
$sqlSecond = $wpdb->prepare( "SELECT meta_value FROM wp_postmeta WHERE meta_id = %s", $post->value );
$result1 = $wpdb->get_results ( $sqlTitle ) or die('Content was not loaded.');
foreach ( $result1 as $post1 ) {
$data[$counter] = $post1->meta_value;
$counter++;
}
}

// get image
$sql = $wpdb->prepare( "SELECT meta_value FROM wp_postmeta WHERE post_id = %s AND meta_key = '_wp_attached_file'", $data['1'] );
$result = $wpdb->get_results ( $sql ) or die('Content was not loaded.');
$counter = 0;
foreach ( $result as $post ) {
$imgURL = $post->meta_value;
$counter++;
}
?>

jason23160
05-06-2019, 07:01 AM
function getEnumValues($table, $field)
{
$enum_array = array();
$query = 'SHOW COLUMNS FROM `' . $table . '` LIKE "' . $field . '"';
$result = mysql_query($query);

if($result === FALSE) {
die(mysql_error()); }

$row = mysql_fetch_row($result);
preg_match_all('/\'(.*?)\'/', $row[1], $enum_array);
if(!empty($enum_array[1]))
{
//Shift array keys to match original enumerated index in MySQL (allows for use of index values instead of strings)
foreach($enum_array[1] as $mkey => $mval) $enum_fields[$mkey+1] = $mval;
return $enum_fields;
}
else
return array(); // Return an empty array to avoid possible errors/warnings if array is passed to foreach() without first being checked with !empty().