我有一个INSERT查询问题。
问题来了:
昨天我用这个代码上传数据,它工作得很好。今天,当我在表单上点击提交时,它只显示一个空白页面。没有错误,只是空白。错误日志中没有任何内容。所有SELECT查询工作正常,所以SELECT Count(id)查询仍然工作。
- 重新上传到服务器
- 语法调整例如' ' ' .$v。"代替"$v"
- 添加打印行来检查变量是否为空。一切正常,所有数据都在INSERT查询之前出现。
- 通过PHP测试插入我的admin,一切正常
- 函数调用是正确的-它是并且保持不变从昨天
函数获取一个物种、一个科和一个属的列表,然后将它们添加到数据库中。以下是代码(未打包的版本-两者昨天都在工作):
error_reporting(E_ALL);
ini_set('display_errors', '1');
function submit($family, $genus, $species){
//require statement
require 'databaseConnect.php';
//get num of species
if(!($result = mysql_query("SELECT Count(id) as num FROM speciesList", $connection))) mysql_error();
$nums = mysql_fetch_row($result);
$num=$nums[0];
//parse species
$holder="";
$array = Array();
while(strlen($species)!=0){
if($species[0]==';'){
$array[] = $holder;
$holder="";
}else{
$holder = $holder . $species[0];
}
$species=substr($species, 1);
}
foreach($array as $v){
$num++;
if(!(mysql_query("INSERT INTO speciesList VALUES($num, '$family', '$genus', '.$v')", $connection))){
mysql_error();
}else{
print "success ";
}
}
mysql_close($connection);
}
提前感谢你,这个问题对我来说相当神秘!Em
您永远永远不想使用字符串替换参数来构建SQL语句,因为它使您容易受到SQL注入攻击。而是绑定你的参数。
您的代码没有返回错误,因为您调用了mysql_error()
并忽略了返回值。它返回错误字符串,所以您希望代码更像这样:
if(!(mysql_query("INSERT INTO speciesList VALUES($num, '$family', '$genus', '.$v')", $connection))){
print_r( mysql_error() );
}else{
print "success ";
}
如果你需要帮助理解错误,一旦你看到它,请张贴在这里。
if(!(mysql_query("INSERT INTO speciesList VALUES($num, '$family', '$genus', '.$v')", $connection))){
echo mysql_error();
}else{
可能还有其他错误,但是mysql_error()函数返回一个字符串。您的脚本需要采取一些操作来显示字符串。
我发现更好的方法是分别构造变量,这样就可以显示它们。我不确定你想不想在$v前加这个点。看看这对你是否有意义。
foreach($array as $v)
{
$num++;
$sql = "INSERT INTO speciesList VALUES($num, '$family', '$genus', '$v')";
$res = mysql_query($sql);
if (!$res) die("FAIL: $sql BECAUSE: " . mysql_error());
echo "<br/>SUCCESS: $sql";
}