mysqli::query() expects parameter 1 to be string,

2019-09-05 15:07发布

I had saved the required steps for a parameterized string match query that outputs the subsequent rows. I had lost my files when transferring to a faulty drive. So... I'm trying to mash things together and this isn't working.

$stmt = $link->prepare("SELECT id,entry,date from table WHERE string=? ORDER by Id DESC");
$stmt->bind_param('s',$string);
$stmt->execute();
$stmt->bind_result($id_db,$entry_db,$date_db);

if (($result = $link->query($stmt)) {

    while ($row = $result->fetch_row()){

    }

}

I can already tell that this is wrong, I don't use the parameterized results and I'm trying to use array indexes such as $row[0].

Going to get yelled at for this one I know.

The end result I want is for example:

string1 has rows: bob, mack, chris string2 has rows: alice, claire, lara

If $string=string1 then the output should be:

chris mack bob

I believe my problem is I am mixing statement types

1条回答
看我几分像从前
2楼-- · 2019-09-05 15:39

Assuming that "$link" is an instance of PHP's "mysqli" class, and that "id" and "Id" are two diffrent columns in your table (if it's not the case, please try replacing "Id" with "id" in the segment ".. ORDER BY Id.."), here is, based on your example, what I suggest that you try:

// Declare your "prepare" statement (make sure to change "Id" for "id" if both are used
// in reference to the same column in your table)
$stmt = $link->prepare('SELECT id, entry, date FROM table WHERE string = ? ORDER BY Id DESC');

// Bind the $string variable
$stmt->bind_param('s',$string);

// Execute the statement
$stmt->execute();

// Store the result (this is sometimes useful, depending on the data types in your table)
$stmt->store_result();

// Check whether at least one row in table matches the query, if not, stop here...
if ($stmt->num_rows === 0) exit('No matching rows'); // or do something else...

// Declare a container (i.e. storage) for each row (this is optional and depends on what
// you are trying to achieve)
$data = [];

// Loop through results (this is just an example; this could be achieved in a number
// of different ways)
for ($i = 0; $i < $stmt->num_rows; $i++)
{
    // Add a new array cell to $data, at index $i
    $data[$i] = [];

    // Bind result for row $i
    $stmt->bind_result($data[$i]['id'],$data[$i]['entry'],$data[$i]['date']);

    // Fetch $i^{th} row
    $stmt->fetch();
}

// Check if it worked (temporary)
var_dump($data);
查看更多
登录 后发表回答