MySQL / php INSERT语句显示不可预测的结果没有插入

时间:2011-03-16 04:32:47

标签: php mysql insert-update

所有数据都已通过,因为我已经反复进行了充分测试以确保其完整。我遇到的问题是我的INSERT声明:

<?php
$db_name = "db";
$connection = mysql_connect('localhost','root','') or die(mysql_error());
$db = mysql_select_db($db_name,$connection) or die(mysql_error());
$sql = "INSERT INTO badges        (id,company_name,company_address,company_city,company_state,company_zip, badge_name,   badge_title) VALUES ";
for($i = 0; $i < count($_POST['badge_name']); $i++) {
$sql = "(
$_SESSION[company_name],
$_SESSION[company_address],
$_SESSION[company_city],    
$_SESSION[company_state],
$_SESSION[company_zip],
".$_POST['badge_name'][$i].",
".$_POST['badge_title'][$i].")";}
$result = mysql_query($sql) or die(mysql_error());
echo print_r($sql);
?>

我的$ sql print_r()是:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Test Company Name, 1224 Adams Ave, Portland,  Oregon, 97128, Bill Smith, W' at line 2

我的表中没有插入任何数据。我已经验证并测试了用户/通行证等。一切正常。

为了更好地衡量,这是我的数组输出,显示所有数据按预期传递。

Mike Jones
所有者
测试公司名称
1224 Adams Ave
Portland
Oregon
97128

Bill Smith < br />工人
测试公司名称
1224亚当斯大道
波特兰州俄勒冈州
97128

我想我在这里错过了一些愚蠢的东西,但是刚开始坚持了4-5个小时!感谢您对我的无知的任何见解!

这是我的表转储,用于任何参考:

CREATE TABLE IF NOT EXISTS `badges` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`company_name` varchar(255) NOT NULL,
`company_address` varchar(255) NOT NULL,
`company_city` varchar(100) NOT NULL,
`company_state` varchar(25) NOT NULL,
`company_zip` varchar(12) NOT NULL,
`badge_name` varchar(100) NOT NULL,
`badge_title` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

5 个答案:

答案 0 :(得分:1)

我认为你的问题不是在插入

时附上你的字符串
$_SESSION[company_name] 

'$_SESSION[company_name]'

对于其他人来说也是如此,你的字符串不被视为字符串,而是sql类的标记

答案 1 :(得分:1)

这将有效,请注意sql concat,用于多个插入

    <?php 
function cleanit($input){
    return mysql_real_escape_string(preg_replace('/[^a-zA-Z0-9\?.,_ -]/s', '', $input));
}
        $db_name = "db";
        $connection = mysql_connect('localhost','root','') or die(mysql_error());
        $db = mysql_select_db($db_name,$connection) or die(mysql_error());
        $sql = "INSERT INTO badges (id,company_name,company_address,company_city,company_state,company_zip, badge_name, badge_title) VALUES ";
        for($i = 0; $i <= count($_POST['badge_name']); $i++) {


        $sql .= '("","'.cleanit($_SESSION['company_name']).'",
        "'.cleanit($_SESSION['company_address']).'",
        "'.cleanit($_SESSION['company_city']).'",    
        "'.cleanit($_SESSION['company_state']).'",
        "'.cleanit($_SESSION['company_zip']).'",
        "'.cleanit($_POST['badge_name'][$i]).'",
        "'.cleanit($_POST['badge_title'][$i]).'")';
        if($i<count($_POST['badge_name'])){$sql .=',';}
     }
        $result = mysql_query($sql) or die(mysql_error());
        echo print_r($sql);
        ?>

答案 2 :(得分:1)

您的错误是您没有正确连接sql查询并尝试在要插入数据库的值周围使用单引号。它也可能引发错误。

在这里输入代码

<?
$db_name = "test";
$connection = mysql_connect('localhost','root','') or die(mysql_error());
$db = mysql_select_db($db_name,$connection) or die(mysql_error());
$sql = "INSERT INTO badges        (company_name,company_address,company_city,company_state,company_zip, badge_name,   badge_title) VALUES ";

for($i = 0; $i < count($_POST['badge_name']); $i++) 
{
  $sql .= "('". $_SESSION['company_name'] . "','"
            . $_SESSION['company_address'] . "','"
            . $_SESSION['company_city'] . "','"
            . $_SESSION['company_state'] . "','"
            . $_SESSION['company_zip'] . "','"
            . $_POST['badge_name'][$i] . "','"
            . $_POST['badge_title'][$i] ."')";

  if($i<count($_POST['badge_name'])-1){$sql .=',';} // if your array count is more than one than add , to make query compatible with mysql sytax  
}
echo $sql;
$result = mysql_query($sql) or die(mysql_error());

?>`

答案 3 :(得分:0)

工作代码:

for($i = 0; $i < count($_POST['badge_name']); $i++) 
{
$sql .= "('"
        . $_SESSION['company_name'] . "','"
        . $_SESSION['company_address'] . "','"
        . $_SESSION['company_city'] . "','"
        . $_SESSION['company_state'] . "','"
        . $_SESSION['company_zip'] . "','"
        . $_POST['badge_name'][$i] . "','"
        . $_POST['badge_title'][$i] ."')";

if($i<count($_POST['badge_name'])-1){$sql .=',';}  
}

答案 4 :(得分:-1)

首先,由于这是一个插入,我们将删除id,同样,你在for循环中覆盖$ sql($sql =而不是$sql .=)并且会话密钥格式错误,应引用非整数输入。我假设zip存储为整数,如果没有添加,则将其更改为'$_SESSION['company_zip']'

$sql = "INSERT INTO badges (company_name,company_address,company_city,company_state,company_zip,badge_name,badge_title) VALUES ";
for($i = 0; $i < count($_POST['badge_name']); $i++) 
{
     $sql .= "('$_SESSION['company_name']','$_SESSION['company_address']','$_SESSION['company_city']','$_SESSION['company_state']',$_SESSION['company_zip'],'$_POST['badge_name'][$i]','$_POST['badge_title'][$i]')";
}
$result = mysql_query($sql) or die(mysql_error());
echo print_r($sql);
?>