【问题标题】:PHP mysql. Trying to retrieve LIKE query using ->bind_param [duplicate]php mysql。尝试使用 ->bind_param [重复] 检索 LIKE 查询
【发布时间】:2018-03-17 22:02:10
【问题描述】:

我正在尝试在我的数据库中进行搜索,它会根据确切的姓氏和名字以及在输入框中输入的名字的首字母返回结果。例如,如果用户输入Simon Burns,它将返回所有用户,名字的初始S 和姓氏的Burns。这是我的代码。

很抱歉,如果之前已经讨论过这个问题,但我找不到一个有效的简单答案。

$firstname = filter_input(INPUT_POST, 'firstname', FILTER_SANITIZE_STRING);
$surname = filter_input(INPUT_POST, 'surname', FILTER_SANITIZE_STRING);

$prep_query = "SELECT id, firstname, surname, profilepic, Gender, StartYear, EndYear, CircaStart, CircaEnd, JnrHouse, SnrHouse
                   FROM people WHERE firstname LIKE ? AND surname = ?";
$namecheckresult = $connection->prepare($prep_query);

// Return all matches wether registered on not
if ($namecheckresult) 
    {
    $initial = $firstname[0];   
    $namecheckresult->bind_param( 'ss',  $initial . '%', $surname);
    $namecheckresult->execute();
    $namecheckresult->store_result();
    $namecheckresult->bind_result($id, $first, $last, $ProfilePic, $Gender, $StartYear, $EndYear, $CircaStart, $CircaEnd, $JnrHouse, $SnrHouse);  

【问题讨论】:

  • 呃,有没有返回 PHP 或 MySQL 的错误代码?
  • ( ! ) 致命错误:无法通过引用传递参数 2
  • 来自manual:“将变量作为参数绑定到准备好的语句”(强调我的)。让我看看能不能找到合适的副本。

标签: php mysql


【解决方案1】:

你混淆了你的 2 个参数

改成

$p1 = '%'.$initial;
$namecheckresult->bind_param( 'ss',  $p1 , $surname);

或者您可能想像这样将% 放在$initial 的正面和背面

$p1 = "%$initial%";
$namecheckresult->bind_param( 'ss',  $p1 , $surname);

【讨论】:

  • 感谢您的及时回复,但这也不起作用。这是我使用那段代码得到的错误。 ( ! ) 致命错误:无法通过引用传递参数 2
  • 好的,试试这个,我有点晕了
  • 是的,谢谢 RiggsFolly 自己最终解决了这个问题,与您的第二个答案相同。
【解决方案2】:

我现在已经找到答案了。

改变 $initial = $firstname[0];

$initial = "%$firstname[0]%";

有效。

希望这对其他人有所帮助。

【讨论】:

  • 好吧,实际上正如php.net/manual/de/mysqli-stmt.bind-param.php 上所写,该变量必须是一个引用。因此,您可能不会在参数部分中一起构建字符串。将$initial = $firstname[0]; $namecheckresult->bind_param( 'ss', $initial . '%', $surname); 更改为$initial = $firstname[0].'%'; $namecheckresult->bind_param( 'ss', $initial, $surname); 应该可以完成工作...
  • 我尝试了您发布的上述内容,但仍然引发错误。我的解决方案不起作用。
猜你喜欢
  • 2019-03-21
  • 2013-05-27
  • 2015-11-07
  • 2011-10-04
  • 2017-06-17
  • 1970-01-01
  • 2014-01-06
  • 2014-01-26
  • 1970-01-01
相关资源
最近更新 更多