1

我无法让这个 mysql 查询正常工作。它没有错误地完成,但没有信息被插入到数据库中。我不太关心找到即时解决方案,但我怎样才能让 mysql 报告幕后发生的事情?

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');

$tempProf = $_POST["professor"];
$tempProfArray = explode("=",$tempProf);
$prof = $tempProfArray[1];

$tempName = $_POST["name"];
$tempNameArray = explode("=",$tempName);
$name = $tempNameArray[1];

$tempNum = $_POST["number"];
$tempNumArray = explode("=",$tempNum);
$num = $tempNumArray[1];

$tempSec = $_POST["section"];
$tempSecArray = explode("=",$tempSec);
$section = $tempSecArray[1];

$tempCat = $_POST["category"];
$tempCatArray = explode("=",$tempCat);
$category = $tempCatArray[1];

$con=mysqli_connect("localhost","root","*****","******");

$result = mysqli_query($con,"SELECT * FROM professors where id='$prof'");
$row = mysqli_fetch_array($result);



if(empty($prof) || empty($name) || empty($num) || empty($section) || empty($category))
{
    echo "emptyField";
}
elseif(!is_numeric($num)  || !is_numeric($section))
{
    echo "NaN";
}
elseif(empty($row))
{
    mysqli_query($con,"INSERT INTO classes (className, classNumber, section, classCategory)
    VALUES ('$name','$num','$section','$category')");

    $classTemp = mysqli_query($con,"SELECT id FROM classes where className='$name' and classNumber='$num' and section ='$section'");
    $classTempArray = mysqli_fetch_array($classTemp);
    $classId = $classTempArray['id'];

    mysqli_query($con,"INSERT INTO professors (name, classes) VALUES ('$name','$classId')");

    $profTemp = mysqli_query($con,"SELECT id FROM professors where name='$name'");
    $profTempArray = mysqli_fetch_array($profTemp);
    $profId = $classTempArray['id'];

    mysqli_query($con,"INSERT INTO classes (professor) VALUES ('$profId') where id ='$classId'");

}
else
{
    $profName = $row['id'];
    mysqli_query($con,"INSERT INTO classes ($profName, className, classNumber, section, classCategory)
VALUES ('$prof', '$name','$num','$section','$category')");
}

?>
4

3 回答 3

6

如何追踪它?您进行了适当的错误处理。程序模式下的 mysqli 将在失败时返回布尔值 FALSE。您的代码实际上都没有检查这些返回值,只是假设一切正常。

您的基本查询代码流应该是

$result = mysqli_query(...);
if (!$result) {
   die(mysqli_error());
}

您的所有代码也容易受到SQL 注入攻击。在您知道如何处理此问题之前,请勿将此代码投入生产,甚至是测试环境。

于 2013-08-28T17:25:53.577 回答
1

启用 MySQL 日志,然后
tail -f /path/to/the/log/file

您可以从 MySql 服务器的角度监控哪些查询以及何时执行。

哟也可以用 grep
tail -f /path/to/to/log/file |过滤 grep '插入' --color

于 2013-08-28T17:25:47.580 回答
0

您应该使用 pdo ( http://php.net/manual/en/book.pdo.php ),因为它比 mysqli 更安全。

您可以使用http://php.net/manual/en/mysqli.error.php调试 msqli 中的错误

于 2013-08-28T17:27:14.557 回答