【问题标题】:execute sql query in php doesn't work ,but the query work in phpmyadmin在php中执行sql查询不起作用,但查询在phpmyadmin中有效
【发布时间】:2015-09-12 06:48:20
【问题描述】:

我有我的数据库 sql 查询文件,我想通过下面的代码在 php 中运行它

$query = file_get_contents('./sqlquery.txt');
print $query;
$conn->query($query);

但它返回此错误

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 'CREATE TABLE IF NOT EXISTS `ads` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ur' at line 2 

我将打印输出复制到 phpmyadmin 中,一切正常,这里有什么问题?

我的 sql 查询是这个

DROP TABLE IF EXISTS `ads`;
CREATE TABLE IF NOT EXISTS `ads` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `url` varchar(300) NOT NULL,
  `path` varchar(200) NOT NULL,
  `width` int(11) NOT NULL,
  `height` int(11) NOT NULL,
  `priority` int(11) NOT NULL,
  `adsalter` varchar(200) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
  `adstitle` varchar(200) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;



DROP TABLE IF EXISTS `comment`;
CREATE TABLE IF NOT EXISTS `comment` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(120) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
  `comment` text CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
  `contentid` int(11) NOT NULL,
  `parentid` int(11) NOT NULL DEFAULT '0',
  `date` varchar(250) NOT NULL,
  `haschild` int(1) NOT NULL DEFAULT '0',
  `visible` int(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;



DROP TABLE IF EXISTS `files`;
CREATE TABLE IF NOT EXISTS `files` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(200) NOT NULL,
  `size` int(14) NOT NULL,
  `type` varchar(50) NOT NULL,
  `newsid` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;



DROP TABLE IF EXISTS `frgpss`;
CREATE TABLE IF NOT EXISTS `frgpss` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(100) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
  `ip` varchar(31) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  `token` varchar(27) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
  `date` int(15) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;



DROP TABLE IF EXISTS `news`;
CREATE TABLE IF NOT EXISTS `news` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `titrimage` varchar(100) NOT NULL,
  `titr` varchar(100) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
  `titralter` varchar(160) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
  `newsshurt` varchar(200) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
  `text` text CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
  `keywords` text CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
  `description` text CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
  `author` varchar(200) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
  `branch` int(11) NOT NULL,
  `date` varchar(160) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
  `visible` int(1) NOT NULL DEFAULT '0',
  `visited` int(11) NOT NULL DEFAULT '0',
  `titrtitle` varchar(200) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;


DROP TABLE IF EXISTS `signup`;
CREATE TABLE IF NOT EXISTS `signup` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `family` varchar(50) NOT NULL,
  `email` varchar(80) NOT NULL,
  `gender` varchar(50) NOT NULL,
  `username` varchar(80) NOT NULL,
  `picture` varchar(80) NOT NULL,
  `password` varchar(60) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


DROP TABLE IF EXISTS `users`;
CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(60) NOT NULL,
  `lastname` varchar(60) NOT NULL,
  `email` varchar(100) NOT NULL,
  `password` varchar(40) NOT NULL,
  `userregistereddate` varchar(60) NOT NULL,
  `key` varchar(60) NOT NULL,
  `type` varchar(20) NOT NULL,
  `userphoto` varchar(50) NOT NULL,
  `usergroup` varchar(300) NOT NULL,
  `ipaddress` text NOT NULL,
  `telnumber` varchar(14) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

【问题讨论】:

  • 发布你的mysql查询?
  • 请显示您的文件内容。
  • 您是否尝试过直接在 php 页面中运行代码而不是从文本文件中调用它?
  • 它在第一行失败(即使它说的是第 2 行)。您需要引用数据库和表,例如 'mydb'.'ads' 而不仅仅是 'ads'
  • 您使用的是什么 API? mysqlmysqlipdo_mysql?

标签: php mysql


【解决方案1】:

你在这里执行多个查询,它不会简单地工作,我很确定在query 函数($conn->query($query);)中你使用的是mysql_query()mysqli_query(),但你会必须做的是改用mysqli_multi_query()。看看这里docx

$con = mysqli_connect($host, $user, $pass, $db) OR die(mysqli_error($con));
$query = file_get_contents('./sqlquery.txt');
mysqli_multi_query($con, $query);
mysqli_close($con);

希望对你有帮助

注意:假设在PHPMyAdmin 中执行时所有查询都运行良好。

【讨论】:

    猜你喜欢
    • 2017-09-14
    • 2012-05-10
    • 2017-03-03
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    相关资源
    最近更新 更多