Tuesday 21 November 2017

mysql - prepared statement failing for "SELECT" command, using mysqli in PHP

style="font-weight: bold;">

Answer



style="font-weight: bold;">

Answer





I've been able to execute multiple
prepared statements using mysqli (in PHP).
However, for some reason the
prepared statements always encounter an error when I try running a "SELECT"
command.
For example, the following line will
succeed:




$stmt=$mysqli->prepare("UPDATE
events SET category='m' WHERE
id=(?)");


However, the
following line will
fail:



$stmt=$mysqli->prepare("SELECT
* FROM events WHERE
id=(?)");


When I say
fail, I mean that the next three lines will return 1 for the UPDATE command (indicating
that one row was
changed)...




$stmt->bind_param('i',$id);
$stmt->execute();
echo
$stmt->affected_rows;


The
next three lines will return 0 for
SELECT:



$stmt->bind_param('i',$id);
$stmt->execute();
echo
$stmt->num_rows;



For
the record, I'm aware that prepared statements aren't that efficient for a single SELECT
- this question is mostly academic.


class="post-text" itemprop="text">
class="normal">Answer



This
function (affected_rows) only works with queries which update a table. In order to get
the number of rows from a SELECT query, use mysqli_stmt_num_rows()
instead.



href="http://php.net/manual/en/mysqli-stmt.affected-rows.php"
rel="nofollow">http://php.net/manual/en/mysqli-stmt.affected-rows.php



Make
sure you store the result
first!!




$stmt->execute();

/*
store result */
$stmt->store_result();

printf("Number
of rows: %d.\n", $stmt->num_rows);


No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...