Fraze Jr.
Fraze Jr.

Reputation: 143

SQL Query returns null?

I want to get all names of my products and push them into an array. If I use the SQL Query (SELECT name FROM wp_all_import_xml GROUP BY name) in phpmyadmin I get this: enter image description here

But if I use the query in my script I get this array:

    array (
  0 => NULL,
  1 => NULL,
  2 => NULL,
  3 => NULL,
  4 => NULL,
  ...)

So, the query must return null. But why? - Everything is correct! I do not get any connection error or query error... Where is my error?

I already tried to decode the strings and I also tried $myTitles[] = $tmp. But it also doesn't work... Any ideas?

And because everything in the $myTitles array is null, the script always enters the if(!(in_array($title, $myTitles) condition and I cannot execute what I actual want... I can only execute this, if the array and the condition is really true!

<?php

if ( ! defined('ABSPATH') ) {
    // Set up WordPress environment 
    require_once( dirname( __FILE__ ) . '/wp-load.php' );
}

unlink('deleteOldProducts.txt');

$myfile = fopen('deleteOldProducts.txt', "w");
$database_gk = new mysqli("localhost", "censored", "censored", "censored");
$database_jt = new mysqli("localhost", "censored", "censored", "censored");
$myTitles = array();
$string = "";

if($database_jt->connect_errno){
    $string .= "+++Couldn't connect to database_jt!+++\n\n");
}

if($database_gk->connect_errno){
    $string .= "+++Couldn't connect to database_gk!+++\n\n");
}

$values_jt = $database_jt->query("SELECT name FROM `wp_all_import_xml` GROUP BY name");
$string .= $database_jt->error . "\n";


while($rowj = $values_jt->fetch_assoc()){
    $tmp = utf8_encode($row["name"]);
    array_push($myTitles, $tmp);
    $tmp = null;
}

$values_gk = $database_gk->query("SELECT `post_title` FROM `fWR6qIN_posts` where post_type = 'product' AND post_status = 'publish' GROUP BY `post_title`");
$string .= $database_gk->error . "\n";

$string .= "+++ Start of Check +++\n\nMein Array:\n" . var_export($myTitles, true) . "\n\n";
$i = 1;

while($row = $values_gk->fetch_assoc()){
    $title = utf8_decode($row["post_title"]);

    if(!(in_array($title, $myTitles))){
        $string .= $i . ":\t" . $title . "\n";
        $i = $i + 1;
    }

    $title = null;
}

$string .= "\n +++ End of Check! +++";
fwrite($myfile, $string);
fclose($myfile);
?>

Greetings and Thank You!

Upvotes: 1

Views: 1533

Answers (1)

Sebastian Brosch
Sebastian Brosch

Reputation: 43574

Your while isn't correct. On while you are using $rowj but on array_push you are using $row. You can try the following code instead:

while($row = $values_jt->fetch_assoc()) {
    $myTitles[] = utf8_encode($row["name"]);
}

Note: If you use array_push() to add one element to the array it's better to use $array[] = because in that way there is no overhead of calling a function.
http://php.net/manual/en/function.array-push.php

Upvotes: 1

Related Questions