PHP,查询失败
我有这段代码,变量“p1”是一个int。调试器显示它正确地接受值。但我得到“查询失败”。数据库值设置为int。是否有帮助PHP,查询失败,php,Php,我有这段代码,变量“p1”是一个int。调试器显示它正确地接受值。但我得到“查询失败”。数据库值设置为int。是否有帮助 <?php session_start(); include 'connect_db.php'; $con = $_SESSION['connection']; $query = "SELECT * FROM class WHERE id_class ='".$_GET['p1']."'"; $result=@
<?php
session_start();
include 'connect_db.php';
$con = $_SESSION['connection'];
$query = "SELECT * FROM class WHERE id_class ='".$_GET['p1']."'";
$result=@mysql_query($con,$query) or die('Error, query1 failed');
$num_result=mysqli_num_rows($result);
if($num_result>0){
$insert_query= " INSERT INTO user_program SET
id_class='".$_POST['id_class']."'
WHERE id_user='".$_SESSION['id_user']."'";
$insert=mysqli_query($con,$insert_query) or die('Error,query2 failed');
if ($insert) {
echo '<html><meta charset="UTF-8"><script language="javascript">alert("ok!"); document.location="add_classes_form.php";</script></html>';
}
else {
echo '<html><meta charset="UTF-8"><script language="javascript">alert("not ok.")</script></html>';
echo '<script language="javascript"> document.location="add_classes_form.php";</script>';
exit();
}
}
首先,您不能将mysql
与mysqli
混用,正如您在示例中看到的那样
Mysql
已被弃用,但我将举个例子,看看它在Mysql
和mysqli
中是如何工作的,以及这两种方法之间的区别
避免在查询中使用@,因为你看不到是否出现真正的错误,这是一种不好的做法
首先,这在两方面都是不好的做法,因为即使使用mysql\u real\u escape\u string()
或mysqli\u real\u escape\u string()
来转义变量,也不安全。不要在准备好的语句中使用PDO
使用mysqli
// mysqli connection
$con = mysqli_connect('host', 'username', 'password', 'database_name');
代码
changemysql\u query($con,$insert\u query)
改为mysql\u query($insert\u query)
不要将mysql
和mysqli
syntaxi混用如果你在写新代码,请不要使用mysql\u*
函数。它们是旧的、破损的,在PHP5.5中被弃用(它太旧了,甚至不再接收安全更新),在PHP7中被完全删除。使用或与准备好的语句和参数绑定一起使用。有关详细信息,请参阅。您完全可以并且应该使用而不是串联查询,如果您使用上述MySQLi或PDO,可以使用这些查询。删除呼叫前的@
,您可能会收到有用的错误消息,而不是抑制任何潜在错误。抑制错误是不好的做法。相反,您应该处理错误,这在调试代码时也会对您有所帮助,就像在本例中一样。这是因为您将mysql\u*
和mysqli\u*
混合在一起,并且正如其他人指出的那样,使用它们是错误的。它们是两个完全不同的api。。不要使用mysql\u*
您应该真正删除mysql\u*
示例,因为它很旧,不推荐使用,而且不安全。您还应该建议使用而不是转义输入,因为在某些特定情况下,即使是mysqli\u real\u escape\u string()
也可能不安全。谢谢您的时间。现在,我在id\u user和id\u classes中都出现了“Undefined index”错误,在INSERT
查询中WHERE
如何工作?如果你看OP的代码,它可能是一个更新
,而不是一个插入
。编辑成更新
@NikosKiriakakis是你得到的“未定义索引”,你应该首先检查表单是否提交,然后使用其他代码,因为你从表单输入中得到$\u POST['id\u user']
<?php
session_start();
include 'connect_db.php';
$con = $_SESSION['connection'];
$p1 = mysqli_real_escape_string($con, $_GET['p1']);
$query = "SELECT * FROM class WHERE id_class = '$p1'";
$result = mysqli_query($con, $query) or die('Error, query failed');
$num_result = mysqli_num_rows($result);
$id_class = mysqli_real_escape_string($con, $_POST['id_class']);
$id_user = mysqli_real_escape_string($con, $_SESSION['id_user']);
if ($num_result > 0)
{
$insert_query = "UPDATE user_program SET id_class = '$id_class' WHERE id_user = '$id_user'";
$insert = mysqli_query($con, $insert_query) or die('Error,query failed');
if ($insert)
{
echo '<html><meta charset="UTF-8"><script language="javascript">alert("OK!"); document.location="add_classes_form.php";</script></html>';
}
else
{
echo '<html><meta charset="UTF-8"><script language="javascript">alert("Not OK.")</script></html>';
echo '<script language="javascript"> document.location="add_classes_form.php";</script>';
exit();
}
}
?>