Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在MYSQL表查询中使用str_替换_Php_Mysql_Str Replace - Fatal编程技术网

Php 在MYSQL表查询中使用str_替换

Php 在MYSQL表查询中使用str_替换,php,mysql,str-replace,Php,Mysql,Str Replace,有很多关于使用str_replace修改MYSQL中使用变量的查询的例子,但我找不到一个能解决我的问题的 我有下面的遗留查询,我正在用PHP和MySQL进行调试 这有点简化: $sql = "SELECT * from MOVIES WHERE cat = '$cat'"; 如果cat有一个特定的值,比如说,“action”,我想检查“冒险” 假设您从查询开始: $cat = "action"; $sql = "SELECT * FROM MO

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

我有下面的遗留查询,我正在用PHP和MySQL进行调试

这有点简化:

$sql = "SELECT * from MOVIES WHERE cat = '$cat'";
如果cat有一个特定的值,比如说,“action”,我想检查“冒险”

假设您从查询开始:

$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字符串中使用空格或撇号有关,但无法使其正常工作

谢谢你的建议。

你想用
“cat=”、“$cat.”、“
替换为
“cat='adventure'”
,而不是
“cat=”、“$cat
替换为
“cat=adventure”

(尽管您在说明
=
周围是否有空格时前后不一致)


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

我不会尝试对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 ] );

你打算换多少人?动作/冒险=1次替换。替换值,而不是整个条件<代码>如果($cat=='action'){$cat='adventure';}无论如何,我希望你使用一个事先准备好的语句。我如何使用占位符?请看比尔的答案。是的,这可能是最好的方法。我将ysth标记为已接受,因为他建议了这种方法,并对您进行了投票,以显示如何做到这一点。@user这是实现这一点的专业方法。通过接受不太专业的答案,你可能会无意中误导研究人员应该使用哪个答案。如果我错了,请纠正我,但首先回答应该也有意义。在Bill给出完整的PDO答案之前,Ysth首先提出了PDO方法以及问题的字面答案(2种方法)。如果伊斯特的答案不正确,那将是另一回事,但它是正确的,他还建议采用占位符方法,比尔提供了完整的答案。我必须选择一个,所以我选择了第一个,并对第二个进行了投票。没有理由否决投票和结束问题。在回答之后。我不关心要点。关键是你的问题解决了。任何人谁有一个类似的问题在未来,并看到这个线程将得到这两个答案的好处。