php - 无法在 php 脚本中执行 sql INSERT 查询 (mysql_query)。 PHP/MySQL——时间敏感

标签 php mysql database insert

更新:现已解决 - 谢谢大家!

修复:我有一个名为“referred_by”的列,在我的代码中它被称为“referred_by_id” - 所以它试图插入到一个不存在的列 - 一旦我修复了这个问题,它就决定工作!

我完成这个项目的时间有限。时钟正在滴答作响。

我正在尝试将 $php_variables 插入名为“clients”的表中。

我已经尝试了几个小时才能让这个脚本工作,并且我让它工作了一次,但后来我意识到我忘记了一个字段,所以我必须在表中添加另一列,当我更新脚本时它停止工作了。我已经恢复了,但现在它仍然不起作用,我只是让自己太沮丧了。

<?php

error_reporting(E_ALL);
ini_set("display_errors", 1);

if (!isset($_COOKIE["user"]))
{
    header ("Location: ./login.php");
}

else
{
    include ("./source.php");
    echo $doctype;
}

$birthday = $birth_year . "-" . $birth_month . "-" . $birth_day;
$join_date = date("Y-m-d");

$error_type = 0;

$link = mysql_connect("SERVER", "USERNAME", "PASSWORD");

if (!$link)
{
    $error = "Cannot connect to MySQL.";
    $error_type = 1;
}

$select_db = mysql_select_db("DATABASE", $link);

if (!$select_db)
{
    $error = "Cannot connect to Database.";
    $error_type = 2;
}

if ($referred_by != "")
{
    $result = mysql_query("
    SELECT id FROM clients WHERE referral_code = $referred_by
    ");

    if (!$result)
    {
        $error = "Cannot find referral.";
        $error_type = 3;
    }

    while ($row = mysql_fetch_array($result))
    {
        $referred_by_id = $row['id'];
    }
}

else
{
    $referred_by_id = 0;
}

$first_name = mysql_real_escape_string($_POST['first_name']);
$last_name = mysql_real_escape_string($_POST['last_name']);
$birth_month = mysql_real_escape_string($_POST['birth_month']);
$birth_day = mysql_real_escape_string($_POST['birth_day']);
$birth_year = mysql_real_escape_string($_POST['birth_year']);
$email = mysql_real_escape_string($_POST['email']);
$address = mysql_real_escape_string($_POST['address']);
$city = mysql_real_escape_string($_POST['city']);
$state = mysql_real_escape_string($_POST['state']);
$zip_code = mysql_real_escape_string($_POST['zip_code']);
$phone_home = mysql_real_escape_string($_POST['phone_home']);
$phone_cell = mysql_real_escape_string($_POST['phone_cell']);
$referral_code = mysql_real_escape_string($_POST['referral_code']);
$referred_by = mysql_real_escape_string($_POST['referred_by']);
$organization = mysql_real_escape_string($_POST['organization']);
$gov_type = mysql_real_escape_string($_POST['gov_type']);
$gov_code = mysql_real_escape_string($_POST['gov_code']);

$test_query = mysql_query
("
INSERT INTO clients (first_name, last_name, birthday, join_date, email, address, city, state, zip_code,
phone_home, phone_cell, referral_code, referred_by_id, organization, gov_type, gov_code)
VALUES ('".$first_name."', '".$last_name."', '".$birthday."', '".$join_date."', '".$email."', '".$address."', '".$city."', '".$state."', '".$zip_code."',
'".$phone_home."', '".$phone_cell."', '".$referral_code."', '".$referred_by_id."', '".$organization."', '".$gov_type."', '".$gov_code."')
");

if (!$test_query)
{
    die(mysql_error($link));
}

if ($error_type > 0)
{
    $title_name = "Error";
}

if ($error_type == 0)
{
    $title_name = "Success";
}

?>


<html>
    <head>
        <title><?php echo $title . " - " . $title_name; ?></title>
        <?php echo $meta; ?>
        <?php echo $style; ?>
    </head>
    <body>
        <?php echo $logo; ?>
        <?php echo $sublogo; ?>
        <?php echo $nav; ?>
        <div id="content">
            <div id="main">

                <span class="event_title"><?php echo $title_name; ?></span><br><br>

                <?php

                if ($error_type == 0)
                {
                    echo "Client was added to the database successfully.";
                }

                else
                {
                    echo $error;
                }

                ?>

            </div>
            <?php echo $copyright ?>
        </div>
    </body>
</html>

最佳答案

绝对不能按原样工作。看起来你有一个 500 错误,因为你有一个 else 缺少 if:

else
{
    $referred_by_id = 0;
}

否则,您需要发布您的数据库架构。

另外,请注意,您确实花了很长的时间来处理这段代码,这使得阅读和维护变得困难。您还缺少任何类型的 SQL 注入(inject)检查...您确实需要通过 mysql_real_escape_string 传递内容(实际上,您应该使用 mysqli,因为 mysql 接口(interface)在几年前基本上已被弃用)。

$keys = array('first_name',
    'last_name',
    'birthday', 
    'join_date', 
    'email', 
    'address', 
    'city', 
    'state', 
    'zip_code',
    'phone_home', 
    'phone_cell', 
    'referral_code', 
    'referred_by_id', 
    'organization', 
    'gov_type', 
    'gov_code');

$_REQUEST['birthdate'] = $_REQUEST['birth_year'].'-'.$_REQUEST['birth_month'].'-'.$_REQUEST['birth_day'];
$_REQUEST['join_date'] = date('Y-m-d',time());

$params = array();
foreach ($keys as $key)
{
    $params[] = mysql_real_escape_string($request[$key]);
}

$sql = 'INSERT INTO clients ('.implode(',', $keys).') ';
$sql .= ' VALUES (\''.implode('\',\'', $params).'\') ';

关于php - 无法在 php 脚本中执行 sql INSERT 查询 (mysql_query)。 PHP/MySQL——时间敏感,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7117292/

相关文章:

javascript - 如何验证输入类型 ="text"元素只接受特定内容?

php - 为什么我需要 "&"?

java - 与 Resin Professional 相比,Quercus PHP 在 Resin Open Source 上的速度有多快(慢)?

php - 在 Drupal 管理/内容中获取空白页面

sql - 2PL,Rigorous vs Strict Model,有什么好处吗?

database - 数据库连接时找不到 GWT 文件问题

php - 如何替换内部 PHP 方法?

php - JSON 编码语法不正确

java - JSP 查询减表值

mysql - NoSQL 数据库还是 SQL?