Php I';我正在尝试向MySqli中插入一些数据

Php I';我正在尝试向MySqli中插入一些数据,php,mysql,mysqli,insert,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;

我在将一些数据插入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;
    }
}
$mysqli=newmysqli(“localhost”、“root”、“root”、“root”);
如果($mysqli->connect\u errno){
echo“未能连接到MySQL:(“$mysqli->connect\u errno.”“$mysqli->connect\u error;
}   
函数数据($url$项){
$domain=parse_url($url,PHP_url_HOST);
交换机($domain){
案例“测试”:
foreach($items作为$item){
$tmp=explode(“/”,$item['link']);
$arr=数组(1,2,3,4,5,6,7,8,9,0);
$author=ucwords(str_replace($arr,,'str_replace('-','','tmp[4]));
$description=strip_标签($item['description']);
$source=“Quoteee”;
$img=“”;
$date=date();
$sql=“插入报价(id、报价、作者、来源、img、日期、激活)值
(NULL、“$quote.”、“$AUTHER.”、“$source.”、“$img.”、“$date.”、1)”;
$insert_row=$mysqli->query($sql);
如果($insert_行){
打印“成功!上次插入记录的ID为:”。$mysqli->insert_ID。“
”; }否则{ die('Error:('.$mysqli->errno')'.$mysqli->Error); } } 打破 } }
您每次都在插入一个空id,我怀疑这就是问题所在

如果id是自动递增的,那么只需将其从insert查询中删除即可

查询可能失败,因为该字段在数据库中设置为NOTNULL

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

只需重新阅读所有代码,并确定您在函数外部初始化了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){
  ...
或者您可以尝试调用全局变量,如:

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){

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


将变量用作全局变量或将其放在函数中

但问题是什么?是否有任何错误?是否检查了错误日志?如果数据库表的id字段设置为整数类型且不为NULL,则必须从查询中删除“NULL”并替换为整数类型。更好的是,如果id字段是一个自动递增字段,那么您不需要在查询中包含id,它将被自动处理。表中如何定义
id
字段?问题是您从未调用
data
函数。当您这样做时,您还必须传入连接信息,否则查询将失败。从-“如果列被声明为非NULL,也可以将NULL分配给该列以生成序列号。当您将任何其他值插入自动增量列时,该列将被设置为该值,并且该序列将被重置,以便下一个自动生成的值从插入的值开始依次出现。”但是它可能被设置为NOTNULL-OP没有指定OP为什么应该“尝试这个”?请添加一个解释,说明你做了什么,以及你为什么这样做,不仅是为了OP,也是为了未来的访客。这将失败,因为您没有为insert语句绑定正确数量的变量。@NiNjA\u HacKeR您以前见过吗?那么向所有人展示这个错误?:-)这会很有帮助的@忍者黑客尝试我的更新查询,我已经从那里删除了
id
,我想你有一个自动递增字段?查看我对你的原始帖子@NiNjA\u HacKeR的最新评论-你从未调用
data()
函数,也没有传递数据库连接。@Alex你仍然有一个列计数绑定不匹配。