我将此代码插入表中。我对INSERT INTO类别的问题是它永远不会将数据插入表中而且没有错误。我在代码中使用几乎相同的查询与不同的表,并在那里工作。任何线索?
<?php
$action = $_GET['action'] ;
if ($action=='question')
question();
elseif ($action=='categories')
categories();
function question() {
if ((isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true))
{
$include("db.php");
$category = $_POST['category'] ;
$subcategory = $_POST['subCategory'] ;
$question = $_POST['question'] ;
$answer = $_POST['answer'] ;
$query = "INSERT INTO faq (category,subcategory,question,answer)
VALUES('.$category.','.$subcategory.','.$question.','.$answer')";
$success = mysql_query($query);
if ($success)
{
echo '<a href="admin.php" >done >';
}
else
{
echo mysql_error();
}
}
}
function categories(){
if ( ! (isset($_SESSION['loggedin']) && ! $_SESSION['loggedin'] == true))
{
include("db.php");
$category = $_POST['category'] ;
$subcategory = $_POST['subCategory'] ;
$query = "INSERT INTO categories (category,subcategory)
VALUES( '$category' , '$subcategory')";
$success = mysql_query($query);
if ($success)
{
echo '<a href="admin.php" >done>';
}
else
{
echo mysql_error();
}
}
}
?>
答案 0 :(得分:4)
首先,为了帮助调试,我将这两行放在脚本的顶部以显示所产生的所有错误。但是,请不要将它们放在生产环境中。
error_reporting(E_ALL);
ini_set('display_errors', '1');
更改
$query = "INSERT INTO faq (category,subcategory,question,answer) VALUES('.$category.','.$subcategory.','.$question.','.$answer')";
对此:
$query = "INSERT INTO faq (category,subcategory,question,answer) VALUES('".$category."','".$subcategory."','".$question."','".$answer."')";
.
之后您错过了$answer
(点);这是一个语法错误,而不是查询错误。
为了使事情变得简单,你可以完全省略这些点:
$query = "INSERT INTO faq (category,subcategory,question,answer) VALUES('$category','$subcategory','$question','$answer')";
请注意SQL注入攻击;使用mysql_real_escape_string()
使您的查询安全(呃)
另一个问题可能是您的包含文件。尝试更改
include("db.php");
要
require("db.php");
如果找不到包含文件,则会失败。在这种情况下,请修复!
答案 1 :(得分:4)
一些问题:
见下面修改的代码。
<?php
$action = $_GET['action'];
if( $action=='question' )
question();
elseif( $action=='categories' )
categories();
function question(){
if( isset( $_SESSION['loggedin'] ) && $_SESSION['loggedin'] == true ){
include( 'db.php' );
$category = mysql_real_escape_string( $_POST['category'] );
$subcategory = mysql_real_escape_string( $_POST['subCategory'] );
$question = mysql_real_escape_string( $_POST['question'] );
$answer = mysql_real_escape_string( $_POST['answer'] );
$query = "INSERT INTO faq ( category , subcategory , question , answer ) VALUES( '{$category}' , '{$subcategory}' , '{$question}' , '{$answer}' )";
echo "SQL Query to execute: $query"; # Debug Message
$success = mysql_query( $query );
if ( $success ){
echo '<a href="admin.php">done</a>';
}else{
echo mysql_error();
}
}
}
function categories(){
if( !( isset( $_SESSION['loggedin'] ) || $_SESSION['loggedin']==true ) ){
include( 'db.php' );
$category = mysql_real_escape_string( $_POST['category'] );
$subcategory = mysql_real_escape_string( $_POST['subCategory'] );
$query = "INSERT INTO categories ( category , subcategory ) VALUES ( '{$category}' , '{$subcategory}' )";
echo "SQL Query to execute: $query"; # Debug Message
$success = mysql_query( $query );
if( $success ){
echo '<a href="admin.php">done</a>';
}else{
echo mysql_error();
}
}
}
答案 2 :(得分:1)
我有同样的问题,使用or die(mysql_error());
并意识到我没有对我的一个变量做addslashes($string)
。它有我需要逃脱的角色。
答案 3 :(得分:0)
我有同样神秘的情况。更糟糕的是,在远程,相同的数据库上,相同的代码正在运行。解决方案是为所有数据库字段定义一个默认值(任何值)......希望这会有所帮助。
答案 4 :(得分:0)
我长期坚持这个问题我发现的唯一解决方案是
使用mysqli而不是mysql,因为在较新版本的php中,这些mysql已被弃用,例如
使用以下方法
并确保顺序保持顺序dirst变量,例如'$ conn',然后在方法'mysqli_select_db($ conne,'checksum')中找到数据库名称;'。
类似于'mysqli_query($ conne,$ enter_command);'第一个变量,然后是查询变量。
$conn=mysqli_connect($mysql_host,$mysql_user,$mysql_password);
mysqli_select_db($conne,'checksum'); // checksum is database name
mysqli_query($conne,$enter_command);
mysqli_close($conne);
还要确保在输入数据库表列时提供空格
$enter_command = "INSERT INTO dbase (name , lastname , password) VALUES ('".$name."','".$lastname."','".$password."')";
您也可以使用此语法
$enter_command = "INSERT INTO dbase (name , lastname , password) VALUES ('{$name}','{$lastname}','{$password}')";
尝试避免sql注入
$gender = mysql_real_escape_string($_POST['gender']);
希望这会有用
答案 5 :(得分:0)
您的代码工作正常,这里的问题是未设置数据库自动增量。如果未设置自动递增,则会发生这种情况。无论您运行脚本多少次,都将无法插入多条记录。如果遇到这种问题,请检查以确保启用了自动增量。
这并不是真正的错误,但是当用户忘记启用自动递增功能时,mysql或php的开发人员应发出警告,以便用户可以选择修复或忽略它。