Возможный сценарий
Я не могу найти, где мой код поступил не так. Вот моя полная ошибка:
Ошибка анализа: ошибка синтаксиса, неожиданный T_VARIABLE в строке x
Что я пытаюсь
$sql = 'SELECT * FROM dealer WHERE id="'$id.'"';
Ответ
Ошибка анализа: проблема с синтаксисом вашей программы, например, оставляя точку с запятой от конца инструкции или, как и в случае выше, пропускает оператор
.
.Простыми словами это синтаксическая ошибка, означающая, что в вашем коде есть что-то, что помешает правильному анализу и поэтому работает.
Что вам нужно сделать, так это внимательно проверить строки, где ошибка для любых простых ошибок.
Это сообщение об ошибке означает, что в строке x файла интерпретатор PHP ожидал увидеть открытую круглую скобку, но вместо этого он встретил нечто, называемое
T_VARIABLE
. Эта вещьT_VARIABLE
называетсяtoken
. Это способ интерпретации PHP-интерпретатора различных фундаментальных частей программ. Когда интерпретатор читает в программе, он переводит то, что вы написали, в список токенов. Где бы вы ни разместили переменную в своей программе, в списке интерпретатора есть токенT_VARIABLE
.Хорошо читается: Список токенов парсера
So убедитесь, что вы включили хотя бы
E_PARSE
в своемphp.ini
. Ошибки анализа не должны существовать в производственных сценариях.Я всегда рекомендовал добавить следующий оператор при кодировании:
error_reporting(E_ALL);
Также неплохо использовать среду IDE, которая позволит вам знать ошибки разбора при наборе текста. Вы можете использовать:
- NetBeans (прекрасный мир красоты, бесплатное программное обеспечение) (лучший, на мой взгляд)
- PhpStorm (дядя Гордон любит это: P, платный план, содержит проприетарное и бесплатное программное обеспечение)
- Eclipse (красота и зверь, бесплатное программное обеспечение)
Вопросы, относящиеся:
Из текста вопроса я получаю впечатление, что строковый результат ожидается , в противоположность результату форматирования HTML.
, Если это так, , самый простой способ достигнуть этого состоит в том, чтобы обработать XML-документ с преобразование идентификационных данных и с <xsl:output indent="yes"/>
инструкция :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:template match="node()|@*"> <xsl:copy> <xsl:apply-templates select="node()|@*"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
При применении этого преобразования на предоставленный XML-документ:
<root><node/></root>
большинство процессоров XSLT (.NET XslCompiledTransform, сакс 6.5.4 и сакс 9.0.0.2, AltovaXML) приводит к требуемому результату:
<root> <node /> </root>
что относительно того, чтобы создать тупиковый узел (document.createElement ('отделение') - или пользоваться Вашей эквивалентной библиотекой), заполняя его строкой xml (через innerHTML) и вызывая простую рекурсивную функцию для корневого элемента/или тупиковый элемент в случае, если у Вас нет корня. Функция назвала бы себя для всех дочерних узлов.
Вы могли затем выделение синтаксиса по пути, быть уверенными, что разметка правильно построена (сделанный автоматически браузером при добавлении через innerHTML) и т.д. Это не было бы так много кода и вероятно достаточно быстро.
Лично я используйте google-code-prettify с этой функцией:
prettyPrintOne('<root><node1><root>', 'xml')
Или, если вы просто хотите другую js функцию для этого, я модифицировал функцию Дарина (много):
var formatXml = this.formatXml = function (xml) {
var reg = /(>)(<)(\/*)/g;
var wsexp = / *(.*) +\n/g;
var contexp = /(<.+>)(.+\n)/g;
xml = xml.replace(reg, '$1\n$2$3').replace(wsexp, '$1\n').replace(contexp, '$1\n$2');
var pad = 0;
var formatted = '';
var lines = xml.split('\n');
var indent = 0;
var lastType = 'other';
// 4 types of tags - single, closing, opening, other (text, doctype, comment) - 4*4 = 16 transitions
var transitions = {
'single->single' : 0,
'single->closing' : -1,
'single->opening' : 0,
'single->other' : 0,
'closing->single' : 0,
'closing->closing' : -1,
'closing->opening' : 0,
'closing->other' : 0,
'opening->single' : 1,
'opening->closing' : 0,
'opening->opening' : 1,
'opening->other' : 1,
'other->single' : 0,
'other->closing' : -1,
'other->opening' : 0,
'other->other' : 0
};
for (var i=0; i < lines.length; i++) {
var ln = lines[i];
var single = Boolean(ln.match(/<.+\/>/)); // is this line a single tag? ex. <br />
var closing = Boolean(ln.match(/<\/.+>/)); // is this a closing tag? ex. </a>
var opening = Boolean(ln.match(/<[^!].*>/)); // is this even a tag (that's not <!something>)
var type = single ? 'single' : closing ? 'closing' : opening ? 'opening' : 'other';
var fromTo = lastType + '->' + type;
lastType = type;
var padding = '';
indent += transitions[fromTo];
for (var j = 0; j < indent; j++) {
padding += ' ';
}
formatted += padding + ln + '\n';
}
return formatted;
};
Небольшая модификация функции javascript efnx clckclcks. Я изменил форматирование с пробелов на табуляцию, но, что наиболее важно, я позволил тексту оставаться в одной строке:
var formatXml = this.formatXml = function (xml) {
var reg = /(>)\s*(<)(\/*)/g; // updated Mar 30, 2015
var wsexp = / *(.*) +\n/g;
var contexp = /(<.+>)(.+\n)/g;
xml = xml.replace(reg, '$1\n$2$3').replace(wsexp, '$1\n').replace(contexp, '$1\n$2');
var pad = 0;
var formatted = '';
var lines = xml.split('\n');
var indent = 0;
var lastType = 'other';
// 4 types of tags - single, closing, opening, other (text, doctype, comment) - 4*4 = 16 transitions
var transitions = {
'single->single': 0,
'single->closing': -1,
'single->opening': 0,
'single->other': 0,
'closing->single': 0,
'closing->closing': -1,
'closing->opening': 0,
'closing->other': 0,
'opening->single': 1,
'opening->closing': 0,
'opening->opening': 1,
'opening->other': 1,
'other->single': 0,
'other->closing': -1,
'other->opening': 0,
'other->other': 0
};
for (var i = 0; i < lines.length; i++) {
var ln = lines[i];
// Luca Viggiani 2017-07-03: handle optional <?xml ... ?> declaration
if (ln.match(/\s*<\?xml/)) {
formatted += ln + "\n";
continue;
}
// ---
var single = Boolean(ln.match(/<.+\/>/)); // is this line a single tag? ex. <br />
var closing = Boolean(ln.match(/<\/.+>/)); // is this a closing tag? ex. </a>
var opening = Boolean(ln.match(/<[^!].*>/)); // is this even a tag (that's not <!something>)
var type = single ? 'single' : closing ? 'closing' : opening ? 'opening' : 'other';
var fromTo = lastType + '->' + type;
lastType = type;
var padding = '';
indent += transitions[fromTo];
for (var j = 0; j < indent; j++) {
padding += '\t';
}
if (fromTo == 'opening->closing')
formatted = formatted.substr(0, formatted.length - 1) + ln + '\n'; // substr removes line break (\n) from prev loop
else
formatted += padding + ln + '\n';
}
return formatted;
};
var formatXml = this.formatXml = function (xml) {
var reg = /(>)(<)(\/*)/g;
var wsexp = / *(.*) +\n/g;
var contexp = /(<.+>)(.+\n)/g;
xml = xml.replace(reg, '$1\n$2$3').replace(wsexp, '$1\n').replace(contexp, '$1\n$2');
var pad = 0;
var formatted = '';
var lines = xml.split('\n');
var indent = 0;
var lastType = 'other';