我有一个bookings.php页面,其中有一个jqgrid,显示所有在线预订。双击一行时,将打开一个jq对话框,显示有关预订的所有详细信息。此外,当你双击,我有一个变量定义,这是我想传递给PHP脚本的预订参考:
var brData = rowData['bookref'];
我通过ajax发送此变量:
function getGridRow(brData) {
$.ajax({
// Request sent from control panel, so send to cp.request.php (which is the handler)
url: 'scripts/php/bootstrp/all.request.php',
type: 'GET',
// Build data array - look at the '$_REQUEST' parameters in the 'insert' function
data: {
//ft: "getDGRow",
rowdata: 'fnme=getDGRow&row_data='+brData,
data: brData,
// Either pass a row id as the 'id' OR a where clause as the 'condition' never both
id: null,
condition: null
},
dataType: 'text',
timeout: 20000,
error: function(){
alert("It failed");
$('#cp-div-error').html('');
$('#cp-div-error').append('<p>There was an error inserting the data, please try again later.</p>');
$('#cp-div-error').dialog('open');
},
success: function(response){
// Refresh page
// response = brData;
// alert(response);
}
});
}
以下是all.inc.php的开关案例:
case 'getDGRow':
//header('Content-type: text/xml');
DatagridController::getGridRow($_REQUEST['rowdata']);
break;
这是我发送jquery变量的PHP函数,在我的PHP代码中使用:
public static function getGridRow($rowdata) {
$rowdata = $_GET['data'];
echo $rowdata;
$pdo = new SQL();
$dbh = $pdo->connect(Database::$serverIP, Database::$serverPort, Database::$dbName, Database::$user, Database::$pass);
try {
$query = ("SELECT * FROM tblbookings WHERE bookref = '$rowdata'");
$stmt = $dbh->prepare($query);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_BOTH);
BookingDocket::set_id($row['id']);
BookingDocket::set_bookref($row['bookref']);
BookingDocket::set_bookdate($row['bookingdate']);
BookingDocket::set_returndate($row['returndate']);
BookingDocket::set_journeytype($row['journeytype']);
BookingDocket::set_passtel($row['passengertel']);
BookingDocket::set_returndate($row['returndate']);
$stmt->closeCursor();
}
catch (PDOException $pe) {
die("Error: " .$pe->getMessage(). " Query: ".$stmt->queryString);
}
$dbh = null;
}
}
我把echo $ rowdata;在PHP函数中查看变量是否正在传递,因为我可以在firebug控制台中看到'BR12345'。问题是这个查询:
$query = ("SELECT * FROM tblbookings WHERE bookref = '$rowdata'");
未获取任何结果。如果我要说:
$query = ("SELECT * FROM tblbookings WHERE bookref = 'BR12345'");
它确实获取了我需要的结果,所以当将变量brData传递给$ rowdata时,我无法理解为什么这个查询不起作用
有什么建议吗?
答案 0 :(得分:2)
想知道为什么你的代码中有一个准备好的语句但实际上没有正确使用它。
$stmt = $dbh->prepare("SELECT * FROM tblbookings WHERE bookref = :data");
$stmt->execute(array(
':date' => trim($rowdata),
));
我添加了trim()
以确保周围没有可能弄乱的空格或换行符。
<强>更新强>
这是调试时间:
public static function getGridRow($rowdata) {
$rowdata = $_GET['data'];
echo $rowdata;
添加以下行:
echo "=====DEBUG====== ";
var_dump($rowdata);
echo " =====DEBUG====== ";
exit;
这将写入值并立即停止脚本,以便您可以详细检查其值。
答案 1 :(得分:1)
使用功能
HtmlSpecialChar()
Trim()
然后显示$ rowdata变量,如果字符串格式正确则
试试这个
$query = ("SELECT * FROM tblbookings WHERE bookref = '$rowdata'");
或
$query = ("SELECT * FROM tblbookings WHERE bookref = '".$rowdata."'");
PHP可以看到没有 - &gt;的变量&#39;
答案 2 :(得分:0)
我的回答是错误的,我不删除它,所以没有人发布这个错误的答案
证明我错了:http://codepad.org/fvHM81Uh
尝试
$query = ("SELECT * FROM tblbookings WHERE bookref = '" . $rowdata . "'");
在PHP中,字符串中的变量是handlet,所以:
$variable = "Hello";
echo "$variable"; //=> Hello
echo '$variable'; //=> $variable
但是:
echo "'$variable'"; //=> 'Hello'
答案 3 :(得分:0)
不确定上面是否$ rowdata是一个数组,但我假设它不是。在那种情况下,你试过了吗?
$query = "SELECT * FROM tblbookings WHERE bookref = " . $rowdata;
答案 4 :(得分:0)
首先尝试解决您的问题。你说你对firebug没有问题,试着把console.dir()
响应放在这里验证。
同时执行以下操作:
然后使用$_REQUEST
查看yor print_r()
var。你的变量在那吗?如果是,请执行var_dump($_REQUEST['rowdata'])
并检查。
在public static function getGridRow($rowdata)
中,您会看到覆盖$rowdata
以查看回音。最后,如果你现在好了,那么现在准备好你的查询