【问题标题】:Using str_replace in table query in MYSQL [duplicate]在MYSQL的表查询中使用str_replace [重复]
【发布时间】:2021-04-03 16:56:31
【问题描述】:

有很多关于使用 str_replace 修改在 MYSQL 中使用变量的查询的示例,但我找不到解决我的问题的示例。

我正在调试以下用 PHP 和 MySQL 编写的遗留查询。

有点简化:

$sql = "SELECT * from MOVIES WHERE cat = '$cat'";

如果 cat 具有一定的价值,比如“动作”,我想检查“冒险”;

假设您从查询开始:

$cat = "action";
$sql = "SELECT * FROM MOVIES WHERE cat='$cat'";

我正在尝试修改查询:

$needle = "cat=".$cat;
$altcat = "adventure";
$altwhere = "cat=".altcat;
$sql = str_replace($needle,$altwhere,$sql); //NOTHING GETS REPLACED...NOT MATCHING Needle

我该怎么做?我认为问题与在 sql 字符串中使用空格或撇号有关,但无法使其正常工作。

感谢您的任何建议。

【问题讨论】:

  • 您打算更换多少次?动作/冒险 = 1 次替换。
  • 替换值,而不是整个条件。 if ($cat === 'action') { $cat = 'adventure'; }无论如何我宁愿你使用准备好的语句。

标签: php mysql str-replace


【解决方案1】:

您想用"cat='adventure'" 替换"cat='".$cat."'",而不是用"cat=adventure" 替换"cat=".$cat

(虽然你在说=周围是否有空格时不一致。)

但您不应该这样做,而应该使用占位符。

【讨论】:

  • 如何使用占位符?
  • 见比尔的回答。
【解决方案2】:

我不会尝试对 SQL 查询进行字符串替换。相反,只需使用查询参数。

$cat = 'action'; // suppose this is the input to your program

$sql = "SELECT * from MOVIES WHERE cat = ?";

if ($cat == 'action') {
  $cat = 'adventure';
}

$stmt = $db->prepare($sql);

$stmt->execute( [ $cat ] );

【讨论】:

  • 是的,这可能是最好的方法。我将 ysth 标记为已接受,因为他建议了这种方法并赞成你展示如何这样做。
  • @user 这是执行此操作的专业方法。通过接受不太专业的答案,您可能会无意中误导研究人员应该使用哪个答案。
  • 如果我错了,请纠正我,但首先回答应该也很重要。在比尔给出完整的 PDO 答案之前,Ysth 首先建议了 PDO 方法,以及对问题的字面答案(2 种方法)。如果 Ysth 的回答不正确,那将是另一回事,但它是正确的,他还建议了 Bill 提供完整答案的占位符方法。我必须选择一个,所以我选择了第一个并赞成第二个。没有理由拒绝投票和关闭问题。回答后。
  • 我不关心分数。关键是你解决了你的问题。将来遇到类似问题并看到此线程的任何人都将从这两个答案中受益。
猜你喜欢
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
相关资源
最近更新 更多