В сочетании PHP и MySQL двойные кавычки и одинарные кавычки значительно упрощают время написания запросов.
$query = "INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, '$val1', '$val2')";
Теперь предположим, что вы используете прямую переменную post в MySQL-запросе, тогда используйте ее следующим образом:
$query = "INSERT INTO `table` (`id`, `name`, `email`) VALUES (' ".$_POST['id']." ', ' ".$_POST['name']." ', ' ".$_POST['email']." ')";
Это лучшая практика для использования переменных PHP в MySQL.
Проблемы, которые вы видите, являются результатом аргументов PowerShell. В первом примере, когда PowerShell видит $ a, он передает его как единственный параметр msbuild. Мы видим это с помощью утилиты echoargs из PSCX :.
PS> $a = "C:\some\project\or\other\src\Solution.sln /target:Clean /target:Build"
PS> & echoargs $a
Arg 0 is <C:\some\project\or\other\src\Solution.sln /target:Clean /target:Build>
Второй пример еще хуже, потому что вы говорите powershell, чтобы вызывать «$ echoargs $ a» в качестве имя команды и не является допустимым именем команды.
Третья строка работает, потому что CMD.exe получает расширенную форму «$ echoargs $ a» как единственный аргумент, который анализирует и выполняет:
У вас здесь пара вариантов. Сначала я делаю это следующим образом:
PS> & $msbuild C:\some\project\or\other\src\Solution.sln `
/target:Clean /target:Build
Другой вариант - использовать Invoke-Expression следующим образом:
PS> Invoke-Expression "$msbuild $a"
В целом я стараюсь быть очень осторожным с Invoke- Выражение, особенно если какая-либо часть строки, которая вызывается, предоставляется пользователем.
Вы также можете попробовать использовать бесплатный скрипт / модуль скрипта Invoke-MsBuild . Это, по сути, дает вам командлет Invoke-MsBuild PowerShell, который вы можете вызывать вместо того, чтобы пытаться самостоятельно вызвать файл msbuild.exe.
Ugh.
$collectionOfArgs = @("C:\some\project\or\other\src\Solution.sln",
"/target:Clean", "/target:Build")
& $msbuild $collectionOfArgs
Это работает. & Амп; принимает набор аргументов, поэтому вы должны разделить строки, содержащие несколько аргументов, в набор строковых аргументов.