帮忙找语法错误

Python/PHP/Perl 开发与设计
回复
头像
tangmumao_wefls
帖子: 2899
注册时间: 2011-02-11 14:09
系统: AnthonOS Next
来自: 在那不遥远的地方
送出感谢: 3 次
接收感谢: 9 次
联系:

帮忙找语法错误

#1

帖子 tangmumao_wefls » 2012-11-27 16:44

我们高中学生会的一个在线人事数据的web api,和二维码配合,今天中午一小时写的,xampp总报后面处理结果部分的语法错误以及无法连接到数据库(localhost),对照O'Reilly的PHP & MySQL The Missing Manual没有找到语法错误……

lib/config.inc.php
[php] <?php
//MySQL connection settings
define("DBHOST", ""); // MySQL database server
define("USERNAME", ""); //MySQL username
define("PASSWD", ""); //MySQL password
define("DBNAME", ""); //Assign the database you intend to use

?>[/php]

lib/dbconnect.php
[php]< ?php
//Read config file
require 'config.inc.php';

//Connect to MySQL
mysql_connect(DBNAME, USERNAME, PASSWD)
or die("Cannot connet to database:" . mysql_error());

//Use the assigned database
mysql_select_db(DBNAME)
or die("Error using the assigned database" . mysql_error());

?> [/php]

query.php
[php] <?php

//Loading MySQL connection settings
require './lib/dbconnect.php';

//Get the requested member ID
$id = $_REQUEST['suid'];

//Build the query
$base = "SELECT name, gender, classnum, dept, year FROM ";
$match = " WHERE id = ";
$query = $base . "ia" . $match . $id . " UNION " . $base . "da" . $match . $id . " UNION " . $base . "sa" . $match . $id;

//Run the query
$result = mysql_query($query);

//Process the result
if ($result) {
$row = mysql_fetch_array($result);
$name = $row['name']
$gender = $row['gender']
$classnum = $row['classnum']
$dept = $row['dept']
$year = $row['year']
} else {
die("Invalid ID supplied");
};
?>

姓名:<?php echo "{$name}"; ?>
性别:<?php echo "{$gender}"; ?>
班级:<?php echo "{$year}"; ?>年<?php echo "{$classnum}"; ?>班
部门:<?php echo "{$dept}"; ?>
[/php]

Sent from my Lenovo A789 using Tapatalk 2
头像
qy117121
论坛版主
帖子: 49939
注册时间: 2007-12-14 13:40
系统: Winbuntu
来自: 志虚国乌由市
送出感谢: 17 次
接收感谢: 333 次
联系:

Re: 帮忙找语法错误

#2

帖子 qy117121 » 2012-11-27 16:45

i bat
渠月 · QY

本人只会灌水,不负责回答问题

无聊可以点一下→ http://u.nu/ubuntu
头像
枫叶饭团
论坛版主
帖子: 14685
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
送出感谢: 1 次
接收感谢: 132 次
联系:

Re: 帮忙找语法错误

#3

帖子 枫叶饭团 » 2012-11-27 17:23

php,直接无视掉
头像
jarlyyn
论坛版主
帖子: 4671
注册时间: 2006-04-12 18:54
送出感谢: 0
接收感谢: 6 次
联系:

Re: 帮忙找语法错误

#4

帖子 jarlyyn » 2012-11-29 0:42

$name = $row['name']
没分号,请查erroelog.

另外,感觉你的代码会被sql注入
头像
tangmumao_wefls
帖子: 2899
注册时间: 2011-02-11 14:09
系统: AnthonOS Next
来自: 在那不遥远的地方
送出感谢: 3 次
接收感谢: 9 次
联系:

Re: 帮忙找语法错误

#5

帖子 tangmumao_wefls » 2012-11-29 1:17

jarlyyn 写了:$name = $row['name']
没分号,请查erroelog.

另外,感觉你的代码会被sql注入
好吧,求科普……

Sent from my Lenovo A789 using Tapatalk 2
头像
jarlyyn
论坛版主
帖子: 4671
注册时间: 2006-04-12 18:54
送出感谢: 0
接收感谢: 6 次
联系:

Re: 帮忙找语法错误

#6

帖子 jarlyyn » 2012-11-29 11:54

你怎么保证$id是一个参数,而不是某一个sql片段?

比如$id=' 99 or id >0 '

现在一般流行用bind params的方式来做吧。
以yii为例,一般是:

$sql="INSERT INTO tbl user (username, email) VALUES(:username,:email)";
$command=$connection->createCommand($sql);
// replace the placeholder ":username" with the actual username value
$command->bindParam(":username",$username,PDO::PARAM STR);
// replace the placeholder ":email" with the actual email value
$command->bindParam(":email",$email,PDO::PARAM STR);
$command->execute();
// insert another row with a new set of parameters
$command->bindParam(":username",$username2,PDO::PARAM STR);
$command->bindParam(":email",$email2,PDO::PARAM STR);
$command->execute();

这样的
头像
tangmumao_wefls
帖子: 2899
注册时间: 2011-02-11 14:09
系统: AnthonOS Next
来自: 在那不遥远的地方
送出感谢: 3 次
接收感谢: 9 次
联系:

Re: 帮忙找语法错误

#7

帖子 tangmumao_wefls » 2012-11-29 21:03

jarlyyn 写了:你怎么保证$id是一个参数,而不是某一个sql片段?

比如$id=' 99 or id >0 '

现在一般流行用bind params的方式来做吧。
以yii为例,一般是:

$sql="INSERT INTO tbl user (username, email) VALUES(:username,:email)";
$command=$connection->createCommand($sql);
// replace the placeholder ":username" with the actual username value
$command->bindParam(":username",$username,PDO::PARAM STR);
// replace the placeholder ":email" with the actual email value
$command->bindParam(":email",$email,PDO::PARAM STR);
$command->execute();
// insert another row with a new set of parameters
$command->bindParam(":username",$username2,PDO::PARAM STR);
$command->bindParam(":email",$email2,PDO::PARAM STR);
$command->execute();

这样的
我后来改良了一下,是用的mysql_escape_real_string()做的防注入,因为配套的学生会身份卡方案还没有定下来所以没法确定编码方式也无法用正则表达式进行审查

翻遍了O'Reilly的PHP & MySQL: The Missing Manual的安全相关的章节和索引也没有看到和SQL注入有关的内容

Sent from my Lenovo A789 using Tapatalk 2
头像
jarlyyn
论坛版主
帖子: 4671
注册时间: 2006-04-12 18:54
送出感谢: 0
接收感谢: 6 次
联系:

Re: 帮忙找语法错误

#8

帖子 jarlyyn » 2012-11-29 22:01

tangmumao_wefls 写了:
jarlyyn 写了:你怎么保证$id是一个参数,而不是某一个sql片段?

比如$id=' 99 or id >0 '

现在一般流行用bind params的方式来做吧。
以yii为例,一般是:

$sql="INSERT INTO tbl user (username, email) VALUES(:username,:email)";
$command=$connection->createCommand($sql);
// replace the placeholder ":username" with the actual username value
$command->bindParam(":username",$username,PDO::PARAM STR);
// replace the placeholder ":email" with the actual email value
$command->bindParam(":email",$email,PDO::PARAM STR);
$command->execute();
// insert another row with a new set of parameters
$command->bindParam(":username",$username2,PDO::PARAM STR);
$command->bindParam(":email",$email2,PDO::PARAM STR);
$command->execute();

这样的
我后来改良了一下,是用的mysql_escape_real_string()做的防注入,因为配套的学生会身份卡方案还没有定下来所以没法确定编码方式也无法用正则表达式进行审查

翻遍了O'Reilly的PHP & MySQL: The Missing Manual的安全相关的章节和索引也没有看到和SQL注入有关的内容

Sent from my Lenovo A789 using Tapatalk 2
http://docs.php.net/pdo.prepared-statements

这东西和编码压根没关系
头像
tangmumao_wefls
帖子: 2899
注册时间: 2011-02-11 14:09
系统: AnthonOS Next
来自: 在那不遥远的地方
送出感谢: 3 次
接收感谢: 9 次
联系:

Re: 帮忙找语法错误

#9

帖子 tangmumao_wefls » 2012-11-29 22:39

jarlyyn 写了:
tangmumao_wefls 写了:
jarlyyn 写了:你怎么保证$id是一个参数,而不是某一个sql片段?

比如$id=' 99 or id >0 '

现在一般流行用bind params的方式来做吧。
以yii为例,一般是:

$sql="INSERT INTO tbl user (username, email) VALUES(:username,:email)";
$command=$connection->createCommand($sql);
// replace the placeholder ":username" with the actual username value
$command->bindParam(":username",$username,PDO::PARAM STR);
// replace the placeholder ":email" with the actual email value
$command->bindParam(":email",$email,PDO::PARAM STR);
$command->execute();
// insert another row with a new set of parameters
$command->bindParam(":username",$username2,PDO::PARAM STR);
$command->bindParam(":email",$email2,PDO::PARAM STR);
$command->execute();

这样的
我后来改良了一下,是用的mysql_escape_real_string()做的防注入,因为配套的学生会身份卡方案还没有定下来所以没法确定编码方式也无法用正则表达式进行审查

翻遍了O'Reilly的PHP & MySQL: The Missing Manual的安全相关的章节和索引也没有看到和SQL注入有关的内容

Sent from my Lenovo A789 using Tapatalk 2
http://docs.php.net/pdo.prepared-statements

这东西和编码压根没关系
表达错误,编号的格式比如位数

Sent from my Lenovo A789 using Tapatalk 2
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

Re: 帮忙找语法错误

#10

帖子 eexpress » 2012-11-30 10:30

php忘记了。perl才记得。
● 鸣学
回复

回到 “Python/Php/Perl”