我正在尝试将一些数据插入MySqli

时间:2015-03-23 12:55:19

标签: php mysql mysqli insert

我在将一些数据插入mysqli时遇到了问题 我尝试了一切同样的问题,我不知道什么是错的 这是代码

    $mysqli = new mysqli("localhost", "root", "root", "root");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}   
function data($url, $items){
    $domain = parse_url($url, PHP_URL_HOST);
    switch($domain){
        case 'test':
        foreach($items as $item){
            $tmp = explode("/", $item['link']);
            $arr = array(1,2,3,4,5,6,7,8,9,0);
            $author =  ucwords(str_replace($arr, '', str_replace('-', ' ', $tmp[4])));
            $description = strip_tags($item['description']);
            $source = "Quoteee";
            $img = "";
            $date = date();

            $sql = "INSERT INTO quote (id, quote, author, source, img, date, activated) VALUES
                    (NULL, '".$quote."', '".$author."', '".$source."', '".$img."', '".$date."', 1)";
            $insert_row = $mysqli->query($sql);

            if($insert_row){
                print 'Success! ID of last inserted record is : ' .$mysqli->insert_id .'<br />'; 
            }else{
                die('Error : ('. $mysqli->errno .') '. $mysqli->error);
            }
        }
        break;
    }
}

3 个答案:

答案 0 :(得分:0)

您每次都要插入一个NULL ID,我怀疑这是问题所在。

如果id自动递增,则只需将其从插入查询中删除。

查询可能失败,因为数据库中的字段设置为NOT NULL

 $sql = "INSERT INTO quote (quote, author, source, img, date, activated) VALUES ('".$quote."', '".$author."', '".$source."', '".$img."', '".$date."', 1)";

答案 1 :(得分:0)

重新读取所有代码并发现你在函数之外初始化了mysql连接。要解决此问题,您应该将初始化移动到您的函数中:

function data($url, $items){
    $mysqli = new mysqli("localhost", "root", "root", "root");
    if ($mysqli->connect_errno) {
      echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    } else {   

      $domain = parse_url($url, PHP_URL_HOST);
      switch($domain){
  ...

或者您可以尝试调用global var,如:

function data($url, $items){
  global $mysqli;
  ...

但我更喜欢第一种变体。

我开始的部分将帮助您避免SQL注入并使代码更清晰,易于阅读和理解:

$stmt = $mysqli->prepare("INSERT INTO quote (quote, author, source, img, date, activated) VALUES ( ?, ?, ?, ?, ?, 1)");

$stmt->bind_param('sssss', $quote, $author, $source, $img, date("Y-m-d H:i:s", $date));
$stmt->execute();

$insert_row = $stmt->affected_rows;
if($insert_row){

答案 2 :(得分:0)

mysql数据库对象应该在函数数据的范围内。

将变量用作全局变量或将其置于函数