Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.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迁移到MariaDb后出错_Php_Mysql_Mariadb_Syntax Error - Fatal编程技术网

Php 从Mysql迁移到MariaDb后出错

Php 从Mysql迁移到MariaDb后出错,php,mysql,mariadb,syntax-error,Php,Mysql,Mariadb,Syntax Error,我有一个奇怪的错误: 我有一个简单的代码: $id = strip_tags($_SESSION["infos_profile_id"]); $id_friend = strip_tags($_POST["update_user_chat_every_5_second"]); $q = $bdd->query('SELECT * FROM message WHERE id_sender = '.$id_friend.' AND id_send_to = '.$id.' AND messag

我有一个奇怪的错误: 我有一个简单的代码:

$id = strip_tags($_SESSION["infos_profile_id"]);
$id_friend = strip_tags($_POST["update_user_chat_every_5_second"]);
$q = $bdd->query('SELECT * FROM message WHERE id_sender = '.$id_friend.' AND id_send_to = '.$id.' AND message_read = "0"');
它在mysql上运行良好

但在mariadb服务器上托管我的网站后,它看到了那个错误

PHP致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以了解中第1行的“near”和“message_read=“0””的正确语法

我已经做了所有的事情来解决这个问题,但是我找不到真正的错误来自哪里

有什么帮助来解决这个错误吗


谢谢。

我同意上面@MaxT的评论——在将所有变量插入SQL查询后,应该回显它。当您查看格式化SQL查询而不是查询本身的代码时,调试非常困难

关于
strip_tags()
对SQL注入保护没有用处的注释也是正确的

查询参数是防止SQL注入的最佳保护,它们也可以帮助您避免语法错误

下面是代码的外观:

$id = $_SESSION["infos_profile_id"];
$id_friend = $_POST["update_user_chat_every_5_second"];
$sql = 'SELECT * FROM message WHERE id_sender = :id_friend AND id_send_to = :id AND message_read = 0';
$q = $bdd->prepare($sql);
$q->execute( ['id'=>$id, 'id_friend'=>$id_friend] );

这真的很容易

您不能混合使用不同的mysql API。警告:尽可能使用带有占位符值的准备语句,以避免在查询和创建中注入任意数据。在任何用户提供的数据都指定有
:name
指示符的情况下,这些操作都非常简单,以后使用
bind_param
execute
填充指示符,具体取决于您使用的是哪一个。@Parfait PHP世界充满了赤贫和痛苦,这是令人震惊的考虑到有多少伟大的工具是免费的,很容易下载,只是有采取。这可能是因为这些伟大的工具被埋在成堆无知的YouTube“教程”和W3学校之类的垃圾堆里。@tadman我对你的英语理解得很差。所以,感谢大家的评论。每当出现这样的错误时,最好记录实际生成的SQL,查看发送到数据库的内容,然后进行检查。除此之外,与其他人一样,您不能简单地使用表单中发布的变量创建SQL,而不确保它们不安全,通过使用提供的函数/方法使用参数和绑定值,或者确保使用提供的mysqli_real_escape_string函数或类似函数解析输入值,以防止SQL注入。在我所有的项目中,我有604个未准备好的查询。那么我必须改变所有这些604查询吗?哦,我的头,请告诉我我不必。你不必更改查询,除非它插入PHP变量。如果查询只是一个没有变量的普通字符串,则无需更改它。您应该检查每个查询以确保其安全性,但您可能只需要更改其中的一个子集。请这样想:假设您是一名电工,您的主管发现您安装了604个接线盒,其安装方式可能导致房屋火灾。如果你发牢骚,“我必须修理全部604个吗?请告诉我我不必修理。”那么你就没有像专业人士那样对安全负责。如果你的主管因为你的评论解雇了你,我不会感到惊讶。SQL注入是一个严重的缺陷,它经常导致数据泄露。阅读博客作者收集SQL注入案例新闻报道的地方。