我在这里遇到问题,我有这个疑问:
function getPrelaciones($carnet){
$result = query(
"SELECT mhm.Materia_codigo1
FROM Materia_has_Materia mhm
, Materia m
, (SELECT mha.Materia_codigo as materianovista
FROM Materia_has_Alumno mha
WHERE mha.Alumno_carnet = '11111') as n
WHERE n.materianovista = mhm.Materia_codigo
AND mhm.Materia_codigo1 != ''
AND n.materianovista = m.codigo");
print json_encode($result);
}
并且它可以正常工作,但是当我尝试使其成为通用时,像下一个查询一样切换'11111'
$carnet
,它不起作用,它可以工作,但它返回一个空的json:
function getPrelaciones($carnet){
$result = query(
"SELECT mhm.Materia_codigo1
FROM Materia_has_Materia mhm
, Materia m
, (SELECT mha.Materia_codigo as materianovista
FROM Materia_has_Alumno mha
WHERE mha.Alumno_carnet = '%s' ) as n
WHERE n.materianovista = mhm.Materia_codigo
AND mhm.Materia_codigo1 != ''
AND n.materianovista = m.codigo", $carnet);
print json_encode($result);
}
任何解决方案?,谢谢
我的查询功能如下:
function query() {
global $link;
$debug = false;
//get the sql query
$args = func_get_args();
$sql = array_shift($args);
//secure the input
for ($i=0;$i<count($args);$i++) {
$args[$i] = urldecode($args[$i]);
$args[$i] = mysqli_real_escape_string($link, $args[$i]);
}
//build the final query
$sql = vsprintf($sql, $args);
if ($debug) print $sql;
//execute and fetch the results
$result = mysqli_query($link, $sql);
if (mysqli_errno($link)==0 && $result) {
$rows = array();
if ($result!==true)
while ($d = mysqli_fetch_assoc($result)) {
array_push($rows,$d);
}
//return json
return array('result'=>$rows);
} else {
//error
return array('error'=>'Database error');
}
}
答案 0 :(得分:1)
首先,基本调试。改变这个:
$debug = false;
......进入这个:
$debug = true;
您将看到SQL包含的内容。
我有根据的猜测,如果您没有启用完整的错误报告,而您忘记初始化$link
,那么您(不)看到此警告:
警告:mysqli_real_escape_string()期望参数1为mysqli, null给出
......在这一行:
$args[$i] = mysqli_real_escape_string($link, $args[$i]);
mysqli_real_escape_string()失败时返回NULL
,然后显示您的SQL查询:
WHERE mha.Alumno_carnet = ''
^^
附注:
您正在使用支持预准备语句的现代库。为什么要小心逃避?
您认为urldecode()
到底是什么意思? url
前缀表示什么?
答案 1 :(得分:-1)
我认为将变量添加到getPrelaciones
中的sql并且不将其发送到函数
function getPrelaciones($carnet){
$result = query("SELECT mhm.Materia_codigo1 FROM Materia_has_Materia mhm, Materia m, (SELECT mha.Materia_codigo as materianovista FROM Materia_has_Alumno mha WHERE mha.Alumno_carnet = '".$carnet."')as n WHERE n.materianovista = mhm.Materia_codigo AND mhm.Materia_codigo1 != '' AND n.materianovista = m.codigo");
print json_encode($result);
}