gpt4 book ai didi

MySQL查询中的PHP变量WHILE字符串中断

转载 作者:行者123 更新时间:2023-11-30 22:58:56 25 4
gpt4 key购买 nike

为什么我不能在 MySQL 查询的 LIKE 选择器中使用 PHP 字符串变量?

$weekday = '%w%';
echo "$weekday";
$sql = "SELECT id FROM message_instance
WHERE day LIKE $weekday";
$result = $pdo->query($sql);

给我这个错误消息:“SQLSTATE[42000]:语法错误或访问冲突:1064 你的 SQL 语法有错误;检查与你的 MySQL 服务器版本对应的手册,了解在 '% 附近使用的正确语法w%' 在第 2 行"

我试过在变量周围加上双引号。仍然出现错误。

如果我用“%w%”代替变量,它就可以正常工作。

我在其他查询中使用 PHP 变量没有问题。我只是无法理解这一点。

编辑:抱歉,我一定比我想象的还要累。你没事我发布了一个错误的查询。我正在尽一切努力让它与占位符一起工作,但我不知道我做错了什么。

但我确实遇到了一个我无法解决的问题。

try
{date_default_timezone_set ("Pacific/Honolulu");
$daynum=array ("s","m","t","w","h","f","a");
$weekday = strftime("%w");
$weekday = $daynum [$weekday];
//$weekday = "w";
$weekday = '%' . $weekday . '%';
//$weekday = "%w%";
echo "$weekday";

$sql = "SELECT id FROM message_instance
WHERE day LIKE :weekday";

$s = $pdo->prepare($sql);
$s->bindValue(':weekday', "$weekday");
$s->execute();

$result = $s->fetch();

foreach ($result as $row)
{
$messageids = array(
'id' => $row['id']); //THIS IS THE ERROR LINE
}

print_r ($messageids);
exit()

我用单引号让它以多种方式工作 - 抱歉。我真的遇到了一个完全不同的问题,我仍然无法理解。

我一直在使用 PREPARED 语句和 BIND 来确保安全,然后以非常标准化的方式恢复数据,仅在这种情况下我无法让它工作。

我回来了:

Warning: Illegal string offset 'id' in C:\xampp\htdocs\...\gonogo.php on line 28
Warning: Illegal string offset 'id' in C:\xampp\htdocs\...\gonogo.php on line 28
Array ( [id] => 1 )

我在其他地方使用过这个 fetch/foreach 数组组合没有问题。只是看不出哪里出了问题。该数组应包含 1、4 和 5。

最佳答案

如果您的字段类型不是整数(或基于数字,就此而言),您需要用引号封装您的输入。

$sql = "SELECT id FROM message_instance WHERE day LIKE '$weekday'";

但请保护自己免受 SQL injection attacks 的伤害并使用 PDO's prepared statements feature .

关于MySQL查询中的PHP变量WHILE字符串中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24946473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com