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

ⅰ亾dé卋堺 提交于 2019-12-11 19:24:21

问题


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:


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);


来源:https://stackoverflow.com/questions/30675593/mysqliquery-expects-parameter-1-to-be-string-object-given

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!