Php 断断续续地写入数据库只能部分工作
我无法重新创建问题,它似乎只发生在多台机器上的一个人身上 我在想,也许和SQL有关。。我不知道他的ISP是否与此有关?就像我说的,到目前为止,这个问题只发生在一个人身上。。多台机器,多个用户名来测试我的权限代码,这很奇怪 其他100次我都测试过了,都是完美无瑕的。。这是我的部分代码Php 断断续续地写入数据库只能部分工作,php,sql,database,insert,vbulletin,Php,Sql,Database,Insert,Vbulletin,我无法重新创建问题,它似乎只发生在多台机器上的一个人身上 我在想,也许和SQL有关。。我不知道他的ISP是否与此有关?就像我说的,到目前为止,这个问题只发生在一个人身上。。多台机器,多个用户名来测试我的权限代码,这很奇怪 其他100次我都测试过了,都是完美无瑕的。。这是我的部分代码 if($_REQUEST['do'] == 'save_new_vehicle') { $userid = $vbulletin->userinfo['userid']; $username = $vbulle
if($_REQUEST['do'] == 'save_new_vehicle') {
$userid = $vbulletin->userinfo['userid'];
$username = $vbulletin->userinfo['username'];
$vbulletin->input->clean_array_gpc('p', array(
'year' => TYPE_INT,
'make_model' => TYPE_NOHTML,
'susp_type' => TYPE_NOHTML,
'interior' => TYPE_NOHTML,
'exterior' => TYPE_NOHTML,
'audiovideo' => TYPE_NOHTML,
'wheelstires' => TYPE_NOHTML,
'suspension' => TYPE_NOHTML,
'drivetrain' => TYPE_NOHTML,
'nickname' => TYPE_NOHTML,
));
$year = $vbulletin->GPC['year'];
$make_model = $vbulletin->GPC['make_model'];
$susp_type = $vbulletin->GPC['susp_type'];
$interior = $vbulletin->GPC['interior'];
$exterior = $vbulletin->GPC['exterior'];
$audio_video = $vbulletin->GPC['audiovideo'];
$wheels_tires = $vbulletin->GPC['wheelstires'];
$suspension = $vbulletin->GPC['suspension'];
$drivetrain = $vbulletin->GPC['drivetrain'];
$nickname = $vbulletin->GPC['nickname'];
$sql = "INSERT INTO ". TABLE_PREFIX ."BAMFG_vehicle (
userid,
username,
nickname,
year,
make_model,
susp_type,
exterior,
interior,
audio_video,
drivetrain,
suspension,
wheels_tires) VALUES (
'". $userid ."',
'". $username ."',
'". $nickname ."',
'". $year ."',
'". $make_model ."',
'". $susp_type ."',
'". $exterior ."',
'". $interior ."',
'". $drivetrain ."',
'". $audio_video ."',
'". $suspension ."',
'". $wheels_tires ."')";
$db->query_write($sql);
}
它将写:年,制作模型,悬挂类型,内部,外部和音频视频。。对这家伙来说没有别的了
再一次,我无数次试图在一切正常的情况下重新制造问题,其他人以及一切正常的情况下。我在拔头发
你可以自己尝试一下这个网站,看看我们能否复制结果。。
登录:stackoverflow
密码:密码
在我把所有代码弄清楚之前,没有CSS的一切都是粗糙的。。再次感谢
编辑*
我已将代码更改为:
$year = mysql_real_escape_string($vbulletin->GPC['year']);
$make_model = mysql_real_escape_string($vbulletin->GPC['make_model']);
$susp_type = mysql_real_escape_string($vbulletin->GPC['susp_type']);
$interior = mysql_real_escape_string($vbulletin->GPC['interior']);
$exterior = mysql_real_escape_string($vbulletin->GPC['exterior']);
$audio_video = mysql_real_escape_string($vbulletin->GPC['audiovideo']);
$wheels_tires = mysql_real_escape_string($vbulletin->GPC['wheelstires']);
$suspension = mysql_real_escape_string($vbulletin->GPC['suspension']);
$drivetrain = mysql_real_escape_string($vbulletin->GPC['drivetrain']);
$nickname = mysql_real_escape_string($vbulletin->GPC['nickname']);
一切对我仍然有效,我将运行更多的测试,看看会发生什么。想法?不要试图通过查看生成SQL的代码来调试SQL!这段代码执行的最后一个INSERT语句是什么?听起来像是在将值放入查询之前没有正确转义值的问题。这就解释了为什么它适用于大多数人——除了可怜的O'Brien先生。DustyJoe:添加
mysql\u real\u escape\u string
对你没有帮助。您要做的是在开始修复错误之前复制错误。通常情况下,添加撇号会破坏未被替换的MySQL查询,因此这可能是复制它的最佳方式。当然,使用预先准备好的语句是最好的方法,但不幸的是,vbulletin仍然在使用遗留的mysql.*
函数。这只是我在搜索时发现的。。今晚我要试着打破它。