2

试图让准条件插入工作。我在数据库中有三种不同类型的元素,created_at 日期是唯一键。构建数据库的人对每个表(课程、系列、包)使用相同的结构,所以我必须依赖 created_at 字段来获取唯一值。

情况是我想插入一个新行,但不知道是在purchase_lessons、purized_series 还是purized_pa​​ckages 表中。我知道 $item_current (这是从 $_POST 返回的日期 - 在另一个部分工作),我知道 $user_id (同样的原因)。但这不是插入新行:

$is_lesson = mysql_real_escape_string(mysql_query("SELECT id FROM lessons WHERE created_at LIKE \"$item_current\""));
$is_series = mysql_real_escape_string(mysql_query("SELECT id FROM series WHERE created_at LIKE \"$item_current\""));
$is_package = mysql_real_escape_string(mysql_query("SELECT id FROM packages WHERE created_at LIKE \"$item_current\""));
$lesson_rows = mysql_num_rows($is_lesson);
$series_rows = mysql_num_rows($is_series);
$package_rows = mysql_num_rows($is_package);
$lesson_result = mysql_fetch_array($is_lesson);
$series_result = mysql_fetch_array($is_series);
$package_result = mysql_fetch_array($is_package);
$lesson_id_to_insert = $lesson_result['id'];
$series_id_to_insert = $series_result['id'];
$package_id_to_insert = $package_result['id'];

if ($lesson_rows > 0) {
    mysql_query("INSERT INTO purchased_lessons VALUES ($user_id,$lesson_id_to_insert])");
} else if ($series_rows > 0) {
    mysql_query("INSERT INTO purchased_series VALUES ($user_id,$series_id_to_insert)");
} else if ($package_rows > 0){
    mysql_query("INSERT INTO purchased_packages VALUES ($user_id,$package_id_to_insert)");
}

我想我离得太近了,只见树木不见森林。它只是不会执行插入。

4

3 回答 3

0

试试这样:

mysql_query("INSERT INTO purchased_lessons VALUES (\"$user_id\",\"$lesson_id_to_insert\")");

在每个插入查询中添加引号。

于 2013-07-08T13:09:23.413 回答
0

上面你的代码也是不正确的改变下面的所以你已经mysql_real_escape_stringmysql_query返回值出来了。

$is_lesson = mysql_real_escape_string(mysql_query("SELECT id FROM lessons WHERE created_at LIKE \"$item_current\""));

读书

$is_lesson = mysql_query("SELECT id FROM lessons WHERE created_at LIKE \"$item_current\"");
于 2013-07-08T13:12:01.563 回答
0

删除试图转义返回的资源句柄的 mysql_real_escape_string(....),这不是必需的,并且可能会导致后面的 mysql_num_rows() 出现问题。

我不会担心有关使用现在已弃用的 mysql_* 调用的警告,因为很明显您正在维护一个不是您编写的现有旧系统。

于 2013-07-08T13:15:50.057 回答