Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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解析“;意外'$结果';(T_变量)";_Php_Mysql_Parsing_Count - Fatal编程技术网

Php 计数MySQL解析“;意外'$结果';(T_变量)";

Php 计数MySQL解析“;意外'$结果';(T_变量)";,php,mysql,parsing,count,Php,Mysql,Parsing,Count,我正在制作一个基本网站,为度假国家提供建议。 首先你喜欢一些国家,然后它会“计算”哪些国家最适合你。 问题是,一开始我忘了,一开始人们能够不止一次地喜欢一个国家。为了防止出现这种情况,我提出了以下代码: <?php $db_host = "localhost"; $db_username = "root"; $db_pass = ""; $db_name = "project"; $con = mysqli_connect("$db_host","$db_username","$

我正在制作一个基本网站,为度假国家提供建议。 首先你喜欢一些国家,然后它会“计算”哪些国家最适合你。 问题是,一开始我忘了,一开始人们能够不止一次地喜欢一个国家。为了防止出现这种情况,我提出了以下代码:

<?php
$db_host = "localhost"; 
$db_username = "root";
$db_pass = ""; 
$db_name = "project"; 


$con = mysqli_connect("$db_host","$db_username","$db_pass","$db_name") or die ("could not connect to mysql");

$countryID = $_GET["country"];

$user = $_GET["user"];

$query = "SELECT COUNT(userID) AS identicalLikes FROM likes WHERE userID=".$user." AND countryID=".$countryID.";" // Counts how many times this country is already liked by this user

$result = mysqli_query($con, $query);
$row = mysqli_fetch_array($result);
$identicalLikes = $row['identicalLikes'];
?>

然后我检查这个数字是否为零,这样我就知道是否应该将它添加到我的数据库中(因为它已经存在)

我已经做了一些研究,我知道什么是解析。但因为我不知道问题是在查询中还是在解析中

有人知道我做错了什么还是有更好的建议?
创建布尔数据库不是一个选项,因为当更多用户加入该站点时,它的内容将变得非常困难。

您忘记了一个
在$sql定义的末尾:

$query = "SELECT [...snip...] countryID=".$countryID.";"; // Counts [..snip...]
                                                        ^---here
带引号的分号(
“;”
)是SQL语句的一部分,不会终止PHP的此行


此外,您很容易受到插入值的攻击,并且没有引用插入值(假设它们是字符串),因此即使修复了此PHP语法错误,您的SQL仍将从根本上被破坏。

使用
mysqli
时,您应该使用参数化查询,并将用户数据添加到查询中。避免使用字符串插值来实现这一点,因为您在本例中遇到了严重的问题。谢谢!但你们并没有看到的是,我用下拉菜单来选择。没有任何可以输入字符串的字段。不知道这是否100%安全?必须假定任何用户数据都不安全。HTML表单有一个下拉列表并不意味着什么,因为这是可以更改的。即使这个应用程序今天没有暴露在敌对用户面前,它也可能在将来出现,而养成这样的习惯只会在将来带来可怕的麻烦。这个错误是由这样的错误造成的,一个简单的错误,所以要有纪律,一开始就不要犯错误。