Re: [PHP-DB] MySQL query executes outside of PHP, but not in PHP

[email protected] (Peter Beckman)
Newsgroups php.db
Message-ID <[email protected]>
On Fri, 23 Jan 2009, [email protected] wrote:

> Hi,
> I am running: PHP 5.2.8, Apache 2.2.11, MySQL 5.1.30 on Win32/XP.
>
> I have a number of queries on my page which are very similar in
> structure, and they all work except for the following one.
>
> $mysql['process'] = $client2->real_escape_string($clean['process']);
>
> $sql = "SELECT f.name, f.description
>        FROM files f, file_mapping m, processes p
>        WHERE m.file_id = f.id
>        AND p.name = '{$mysql['process']}'
>        AND m.process_id = p.id
>        AND m.io_flag = 'I'";
>
> if ($client2->multi_query($sql)) {
>  echo '<h3 class="H3-OTMS">Main Input Files</h3>';
>  do {
>    if ($result = $client2->use_result()) {
>         while ($input = $result->fetch_row()) {
>               $filename = $input[0];
>               $descr = $input[1];
>               echo '<p><span class=FileName>'.$filename.'</span>'.'
> '.$descr.'</p>';
>             }
>            $result->close();
>            }
>    } while ($client2->next_result());
>    }
>
>
> If I echo the $sql, and then run it in MySQL directly, it works fine.  I
> have tried replacing the variable in the WHERE clause with a hardcoded
> value and and have tried replacing this query with a very basic query
> with no variable, but nothing has worked. No error message is returned.
>
> Any suggestions as to what I might check?  Here's an example of an echo
> of the following $sql that runs OK in MySQL Query Browser:
> SELECT f.name, f.description FROM files f, file_mapping m, processes p
> WHERE m.file_id = f.id AND p.name = 'BCOM1AC' AND m.process_id = p.id
> AND m.io_flag = 'I'

  error_log("Hey, the SQL is: $sql");

  Then look in your php error log (you do have error logging enabled,
  right?)

  If that SQL in the error log is fine, then your problem is
  $client2->multi_query($sql) -- what does THAT return?  What SHOULD it
  return?  What are you expecting it to return?  Does it return what you
  thought it did?

  When you do "if ($var)" it can sometimes have unexpected results.  If $var
  is an empty string, it's still true, and executes.  I don't know that
  multi_query SHOULD return, or how to determine if it throws an error, but
  that's one place to start.

  Next, if multi_query worked, then this line is suspect:

>    if ($result = $client2->use_result()) {

  This will always result in TRUE, as the assignment will always succeed.
  Change it to:

>    if (($result = $client2->use_result())) {

  (added parenthesis)

  What DB library are you using?

---------------------------------------------------------------------------
Peter Beckman                                                  Internet Guy
[email protected]                                 http://www.angryox.com/
---------------------------------------------------------------------------
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.