我有这个代码和变量" p1"是一个int。调试器显示它正确地获取值。但我得到了#34;查询失败"。数据库值设置为int。有什么帮助吗?
<?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();
}
}
&GT;
答案 0 :(得分:-1)
首先,您不能将#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include <string.h>
//#include <math.h>
typedef unsigned char poly8;
typedef unsigned long long poly8x64[8];
void intToBits(unsigned k, poly8 nk[8]) {
int i;
for(i=7;i>=0;i--){
nk[i] = (k%2);
k = (int)(k/2);
}
}
void poly8_bitslice(poly8x64 r, const poly8 x[64])
{
//TODO
int i;
for(i=0;i<64;i++){
poly8 xb[8];
intToBits(x[i], xb);
int j;
long long row;
for(j=0;j<8;j++){
row = row + x[j];
}
printf("row=%d \n", row);
}
}
int main()
{
poly8 a[64], b[64], r[64];
poly8x64 va, vb, vt;
int i;
FILE *urandom = fopen("/dev/urandom","r");
for(i=0;i<64;i++)
{
a[i] = fgetc(urandom);
b[i] = fgetc(urandom);
}
poly8_bitslice(va, a);
poly8_bitslice(vb, b);
fclose(urandom);
return 0;
}
与mysql
混合,就像您在示例中看到的那样。
mysqli
已弃用但我会举例说明它在Mysql
和mysql
中的工作原理以及这两种方法之间的差异。
避免在查询中使用 @ ,因为你无法看到是否出现真正的错误,这是一种不好的做法。
首先,这在两个方面都是一种不好的做法,因为即使你使用mysqli
或mysql_real_escape_string()
转义变量,它也不安全。而不是使用这个使用mysqli_real_escape_string()
准备好的陈述。
使用PDO
mysqli
代码
// mysqli connection
$con = mysqli_connect('host', 'username', 'password', 'database_name');